你的位置:首页 > Java教程

[Java教程]JAVA中使用FTPClient上传下载


JAVA中使用FTPClient上传下载

        在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

一、上传文件

         原理就不介绍了,大家直接看代码吧

 1   /** 2    * Description: 向FTP服务器上传文件 3    * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 4    * @param url FTP服务器hostname 5    * @param port FTP服务器端口 6    * @param username FTP登录账号 7    * @param password FTP登录密码 8    * @param path FTP服务器保存目录 9    * @param filename 上传到FTP服务器上的文件名10    * @param input 输入流11    * @return 成功返回true,否则返回false12   */13   public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {14     boolean success = false;15     FTPClient ftp = new FTPClient();16     try {17       int reply;18       ftp.connect(url, port);//连接FTP服务器19       //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器20       ftp.login(username, password);//登录21       reply = ftp.getReplyCode();22       if (!FTPReply.isPositiveCompletion(reply)) {23         ftp.disconnect();24         return success;25       }26       ftp.changeWorkingDirectory(path);27       ftp.storeFile(filename, input);      28       29       input.close();30       ftp.logout();31       success = true;32     } catch (IOException e) {33       e.printStackTrace();34     } finally {35       if (ftp.isConnected()) {36         try {37           ftp.disconnect();38         } catch (IOException ioe) {39         }40       }41     }42     return success;43   }<pre></pre>

下面我们写两个小例子:

1.将本地文件上传到FTP服务器上,代码如下:

 1   @Test 2   public void testUpLoadFromDisk(){ 3     try { 4       FileInputStream in=new FileInputStream(new File("D:/test.txt")); 5       boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in); 6       System.out.println(flag); 7     } catch (FileNotFoundException e) { 8       e.printStackTrace(); 9     }10   }<pre></pre>

2.在FTP服务器上生成一个文件,并将一个字符串写入到该文件中

 1   @Test 2   public void testUpLoadFromString(){ 3     try { 4       InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8")); 5       boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input); 6       System.out.println(flag); 7     } catch (UnsupportedEncodingException e) { 8       e.printStackTrace(); 9     }10   }<pre></pre>

二、下载文件

       从FTP服务器下载文件的代码也很简单,参考如下:

 1   /** 2    * Description: 从FTP服务器下载文件 3    * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔红保(cuihongbao@d-heaven.com)创建 4    * @param url FTP服务器hostname 5    * @param port FTP服务器端口 6    * @param username FTP登录账号 7    * @param password FTP登录密码 8    * @param remotePath FTP服务器上的相对路径 9    * @param fileName 要下载的文件名10    * @param localPath 下载后保存到本地的路径11    * @return12   */13   public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {14     boolean success = false;15     FTPClient ftp = new FTPClient();16     try {17       int reply;18       ftp.connect(url, port);19       //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器20       ftp.login(username, password);//登录21       reply = ftp.getReplyCode();22       if (!FTPReply.isPositiveCompletion(reply)) {23         ftp.disconnect();24         return success;25       }26       ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录27       FTPFile[] fs = ftp.listFiles();28       for(FTPFile ff:fs){29         if(ff.getName().equals(fileName)){30           File localFile = new File(localPath+"/"+ff.getName());31           32           OutputStream is = new FileOutputStream(localFile); 33           ftp.retrieveFile(ff.getName(), is);34           is.close();35         }36       }37       38       ftp.logout();39       success = true;40     } catch (IOException e) {41       e.printStackTrace();42     } finally {43       if (ftp.isConnected()) {44         try {45           ftp.disconnect();46         } catch (IOException ioe) {47         }48       }49     }50     return success;51   }

ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4635302.html

                          写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐


                                     每天多学一点点     代码少敲一点点