• 所用到的jar包有:  
  • commons-net-1.4.1.jar  
  • jakarta-oro.jar  

 

一、上传文件

01
文件上传源代码 
02
            /**  
03
     * Description: 向FTP服务器上传文件  
04
     * @Version1.0  
05
     * @param url FTP服务器hostname  
06
     * @param port FTP服务器端口  
07
     * @param username FTP登录账号  
08
     * @param password FTP登录密码  
09
     * @param path FTP服务器保存目录  
10
     * @param filename 上传到FTP服务器上的文件名  
11
     * @param input 输入流  
12
     * @return 成功返回true,否则返回false  
13
     */   
14
    public static boolean uploadFile( 
15
            String url,//FTP服务器hostname  
16
            int port,//FTP服务器端口 
17
            String username, // FTP登录账号  
18
            String password, //FTP登录密码 
19
            String path, //FTP服务器保存目录 
20
            String filename, //上传到FTP服务器上的文件名  
21
            InputStream input // 输入流  
22
            ) {   
23
        boolean success = false;   
24
        FTPClient ftp = new FTPClient();   
25
        try {   
26
            int reply;   
27
            ftp.connect(url, port);//连接FTP服务器    
28
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器    
29
            ftp.login(username, password);//登录    
30
            reply = ftp.getReplyCode();   
31
            if (!FTPReply.isPositiveCompletion(reply)) {   
32
                ftp.disconnect();   
33
                return success;   
34
            }   
35
            ftp.changeWorkingDirectory(path);   
36
            ftp.storeFile(filename, input);            
37
                 
38
            input.close();   
39
            ftp.logout();   
40
            success = true;   
41
        } catch (IOException e) {   
42
            e.printStackTrace();   
43
        } finally {   
44
            if (ftp.isConnected()) {   
45
                try {   
46
                    ftp.disconnect();   
47
                } catch (IOException ioe) {   
48
                }   
49
            }   
50
        }   
51
        return success;   
52
    }


以下是文件上传的测试用例:


/** 
02
 * 将本地文件上传到FTP服务器上 
03
 * 
04
 */ 
05
public void testUpLoadFromDisk(){   
06
    try {   
07
        FileInputStream in=new FileInputStream(new File("D:/test.txt"));   
08
        boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test","test.txt", in);   
09
        System.out.println(flag);   
10
    } catch (FileNotFoundException e) {   
11
        e.printStackTrace();   
12
    }    
13
}
 

01
/** 
02
 * 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中 
03
 * 
04
 */ 
05
public void testUpLoadFromString(){   
06
    try {   
07
        String str = "这是要写入的字符串!"; 
08
        InputStream input = new ByteArrayInputStream(str.getBytes("utf-8"));   
09
        boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test","test.txt", input);   
10
        System.out.println(flag);   
11
    } catch (UnsupportedEncodingException e) {   
12
        e.printStackTrace();   
13
    }   
14
}


二、文件下载

文件下载源代码 
02
    /**  
03
     * Description: 从FTP服务器下载文件  
04
     * @Version1.0  
05
     * @param url FTP服务器hostname  
06
     * @param port FTP服务器端口  
07
     * @param username FTP登录账号  
08
     * @param password FTP登录密码  
09
     * @param remotePath FTP服务器上的相对路径  
10
     * @param fileName 要下载的文件名  
11
     * @param localPath 下载后保存到本地的路径  
12
     * @return  
13
     */   
14
    public static boolean downFile( 
15
            String url, //FTP服务器hostname 
16
            int port,//FTP服务器端口 
17
            String username, //FTP登录账号 
18
            String password, //FTP登录密码 
19
            String remotePath,//FTP服务器上的相对路径  
20
            String fileName,//要下载的文件名 
21
            String localPath//下载后保存到本地的路径 
22
            ) {   
23
        boolean success = false;   
24
        FTPClient ftp = new FTPClient();   
25
        try {   
26
            int reply;   
27
            ftp.connect(url, port);   
28
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器    
29
            ftp.login(username, password);//登录    
30
            reply = ftp.getReplyCode();   
31
            if (!FTPReply.isPositiveCompletion(reply)) {   
32
                ftp.disconnect();   
33
                return success;   
34
            }   
35
            ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录    
36
            FTPFile[] fs = ftp.listFiles();   
37
            for(FTPFile ff:fs){   
38
                if(ff.getName().equals(fileName)){   
39
                    File localFile = new File(localPath+"/"+ff.getName());   
40
                    OutputStream is = new FileOutputStream(localFile);    
41
                    ftp.retrieveFile(ff.getName(), is);   
42
                    is.close();   
43
                }   
44
            }   
45
                 
46
            ftp.logout();   
47
            success = true;   
48
        } catch (IOException e) {   
49
            e.printStackTrace();   
50
        } finally {   
51
            if (ftp.isConnected()) {   
52
                try {   
53
                    ftp.disconnect();   
54
                } catch (IOException ioe) {   
55
                }   
56
            }   
57
        }   
58
        return success;   
59
    }

以下是文件下载的测试用例:


/** 
02
 * 将FTP服务器上文件下载到本地 
03
 * 
04
 */ 
05
public void testDownFile(){ 
06
    try {   
07
        boolean flag = downFile("127.0.0.1", 21, "administrator", "zyuc2011", "test","test.txt", "D:/");   
08
        System.out.println(flag);   
09
    } catch (Exception e) {   
10
        e.printStackTrace();   
11
    }        
12
}