JAVA-使用Commons Net连接FTP
Posted 阿飞的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA-使用Commons Net连接FTP相关的知识,希望对你有一定的参考价值。
使用APACHE下的Commons Net连接FTP
内容出处https://study.163.com/course/courseMain.htm?courseId=1209288803
APACHE官网连接
Commons Net下载地址
找到Net点进去
http://commons.apache.org/proper/commons-net/
下载地址
http://commons.apache.org/proper/commons-net/download_net.cgi
官方例子
API帮助
放到项目里的jar包
项目小例子,源代码
package my; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.omg.CORBA.portable.InputStream; public class test { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub FTPClient ftp = new FTPClient(); //连接服务器 ftp.connect("192.168.1.101", 100); boolean reply = ftp.isConnected(); if(!reply) { System.out.println("** 无法连接至FTP服务器"); System.exit(1); } // int reply = ftp.getReplyCode(); // if(!FTPReply.isPositiveCompletion(reply)); // { // ftp.disconnect(); // System.out.println("** 无法连接至FTP服务器"); // System.exit(1); // } if(!ftp.login("administrator", "Lu123456")) { ftp.logout(); System.out.println("** 错误的用户或密码"); System.exit(1); } System.out.println("Connected."); //字节传输BINARY_FILE_TYPE //文本传输ASCII_FILE_TYPE //一般使用BINARY模式来传输文件,很少使用ASCII_FILE_TYPE ftp.setFileType(FTP.BINARY_FILE_TYPE); //主动模式:enterLocalActiveMode() //被动模式:enterLocalPassiveMode() //一般选择被动模式 ftp.enterLocalPassiveMode(); //设置控制通道的字符集,要与服务端的设定一直 ftp.setControlEncoding("GBK");//用GBK或者UTF-8 //切换目录,设置当前目录(用ftpPath()转换一下) boolean rc = ftp.changeWorkingDirectory(ftpPath("/视频")); if(!rc) { System.out.println("切换目录出错!"); } //列出所有的文件/子目录 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("> list"); FTPFile[] ftpFiles = ftp.listFiles();//查看目录 for(FTPFile f : ftpFiles) { String time = sdf.format(f.getTimestamp().getTime()); String info = ""; if(f.isDirectory()) info = String.format("+ %-20s", f.getName()); else info = String.format(" %-20s %8d %s", f.getName(), f.getSize(), time); System.out.println(info); } //创建目录 ftp.makeDirectory(ftpPath("/音乐")); //删除目录 ftp.removeDirectory(ftpPath("/图片")); //重命名 ftp.rename(ftpPath("/文档.docx"), ftpPath("/改了名字的文档.docx")); //上传文件 File uploadFile = new File("D:/1/2/ABC.docx"); FileInputStream uploadInStream = new FileInputStream(uploadFile); String remotePath = ftpPath(uploadFile.getName()); //小文件直接用 //ftp.storeFile(remotePath, uploadInStream); //大文件,可以自己掌握进度 OutputStream uploadOutStream = ftp.storeFileStream(remotePath); byte[] uploadBuffer = new byte[4000]; while(true) { int n = uploadInStream.read(uploadBuffer); if(n <= 0) break; uploadOutStream.write(uploadBuffer, 0, n); } uploadInStream.close(); uploadOutStream.close(); // //下载文件 // String remptePath = ftpPathGbk("/演示文稿.pptx");//服务器文件路径 // File localFile = new File("D:/1/2/演示文稿.pptx");//下载到本地的路径 // localFile.getParentFile().mkdirs(); // OutputStream outStream = new FileOutputStream(localFile); // // //小文件直接用 // //ftp.retrieveFile(remptePath, outStream); // // //大文件,可以自己掌握进度 // java.io.InputStream inStream = ftp.retrieveFileStream(remptePath); // if(inStream == null) // throw new Exception("远程文件不存在!" + remptePath); // // byte[] buffer = new byte[4000]; // while(true) // { // int n = inStream.read(buffer); // if(n <= 0) break; // // outStream.write(buffer, 0, n); // } // inStream.close(); // outStream.close(); ftp.logout(); ftp.disconnect(); System.out.println("Ouit."); } //API里对中文FTP目录的处理有点问题 //在调用changeWorkingDirectory() / listFiles()等方法时,将参数路径转换一下 private static String ftpPath(String path) { try { return new String(path.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING); }catch(UnsupportedEncodingException e) { return ""; } } }
演示
程序员阿飞
2021年5月22日
以上是关于JAVA-使用Commons Net连接FTP的主要内容,如果未能解决你的问题,请参考以下文章
[Java] 使用 Apache的 Commons-net库 实现FTP操作
使用 org.apache.commons.net.ftp.FTPClient 保护 FTP
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S