java 中使用FTP 下载 上传文件

第一步,我使用的是Apache 的 common-net 包做为FTP的支持。代码如下。

package com.hkrt.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpTest{
	 /** 
     * Description: 从FTP服务器下载文件 
     * @param url FTP服务器hostname 
     * @param port FTP服务器端口 
     * @param username FTP登录账号 
     * @param password FTP登录密码 
     * @param remotePath FTP服务器上的相对路径 
     * @param fileName 要下载的文件名 
     * @param localPath 下载后保存到本地的路径 
     * @return 
     */  
    public static boolean downFile(String url, int port, String username, String password, String remotePath, String fileName, String localPath) {  
        boolean success = false;  
        FTPClient ftp = new FTPClient();  
        try {  
            int reply;  
            ftp.connect(url, port);  
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
            ftp.login(username, password);//登录  
            reply = ftp.getReplyCode();  
            if (!FTPReply.isPositiveCompletion(reply)) {  
                ftp.disconnect();  
                return success;  
            }  
            ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录  
            FTPFile[] fs = ftp.listFiles();  
            for (FTPFile ff : fs) {  
                if (ff.getName().equals(fileName)) {  
                    File localFile = new File(localPath + "/" + ff.getName());  
                    OutputStream is = new FileOutputStream(localFile);  
                    ftp.retrieveFile(ff.getName(), is);  
                    is.close();  
                }  
            }  
            ftp.logout();  
            success = true;  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (ftp.isConnected()) {  
                try {  
                    ftp.disconnect();  
                } catch (IOException ioe) {  
                }  
            }  
        }  
        return success;  
    }  
   public static void main(String[] args) {
	   boolean result = FtpTest.downFile("192.168.0.162", 21, "liucheng", "123456", "/", "tyzf.000004.20101226.txt", "G:/");
	   System.out.println("下载结果:"+result);
  }

}

上传文件:需要给用户添加上传权限

 /** 
     * Description: 向FTP服务器上传文件 
     * @param url FTP服务器hostname 
     * @param port FTP服务器端口 
     * @param username FTP登录账号 
     * @param password FTP登录密码 
     * @param path FTP服务器保存目录 
     * @param filename 上传到FTP服务器上的文件名 
     * @param input 输入流 
     * @return 成功返回00,否则返回01 
     */  
    public static String uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
    	 String result="00"; 
        FTPClient ftp = new FTPClient();  
        try {  
            int reply;  
            ftp.connect(url, port);//连接FTP服务器  
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
            ftp.login(username, password);//登录  
            reply = ftp.getReplyCode();  
            if (!FTPReply.isPositiveCompletion(reply)) {  
                ftp.disconnect();  
                return result;  
            }  
            ftp.setFileType(2);
            ftp.setConnectTimeout(60000); // 60秒,如果超过就判定超时了
            ftp.changeWorkingDirectory(path);  
            ftp.storeFile(filename,input);           
            input.close();  
            ftp.logout();  
        } catch (IOException e) {  
            e.printStackTrace();  
            result = "01";  
        } finally {  
            if (ftp.isConnected()) {  
                try {  
                    ftp.disconnect();  
                } catch (IOException ioe) {  
                }  
            }  
        }  
        return result;  
    }




这是我在本地做的测试没有问题。下一步放到真正的FTP外网环境 。


你可能感兴趣的:(java 中使用FTP 下载 上传文件)