java ftps_Java FTP上传下载(简单实现)

2019-06-12 22:28:33

感谢:

下面是参考的博客,谢谢以下的博主大佬

https://www.cnblogs.com/yingyujyf/p/6933823.html

https://blog.csdn.net/h_tinkinginjava/article/details/80048043   (我把这位博主代码中的UTF-8改成了GBK好用了,UTF-8上传的时候中文文件名是乱码)

已经是快四年的博客园用户了,今天实在是因为遇到的坑太蛋疼了,所以写好之后想直接发个博客。

一、FTP的配置

FTP配置下面的博主介绍的很清楚了:

https://www.cnblogs.com/2016-10-07/articles/6673074.html

二、FTP练习目录展示

下图是FTP的练习截图:

386468f1740e048aceef9e3cc949d3d5.png

三、jar包下载

用到了这三个jar包,jar包确实不大好找,下面是我上传的jar包连接:

https://files.cnblogs.com/files/gbn007/FTP%E7%AE%80%E5%8D%95%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E6%89%80%E9%9C%80%E8%A6%81%E7%9A%84jar%E5%8C%85.rar

四、测试目录展示

测试用到的文件展示(FTPDOWN中没有任何文件),图片好大呀,暂时还不会改大小,会改了我再改一下:

fcc6e2edc015f10e89a35b8ab5485e4f.png

员工信息表.txt 下图:

8a6e4c019ff4a27f0f5e0a2d8da56898.png

五、代码展示

之后就开始代码发布阶段了:

Main.java:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packageFTP;2

3 import java.io.*;4

5 public classMain {6 public static voidmain(String[] args) {7 String ftpHost = "172.203.160.104";8 String ftpUserName = "GBNFTP";9 String ftpPassword = "ASDFGHJKL;'";10 int ftpPort = 21;11 String ftpPath = "/FTP/FTPDOWN";12 String localPath = "D:\\FTP\\员工信息表.txt";//"D:\\FTP\\upload.txt";

13 String downloadPath = "D:\\FTP";14 String uploadFileName = "员工上传.txt";//"ftp_upload.txt";

15 String downloadFileName = "员工下载.txt";//"ftp_download.txt";16

17 //上传一个文件

18 try{19 System.out.println("=============上传文件操作===============");20 FileInputStream in = new FileInputStream(newFile(localPath));21 boolean isUp =FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, uploadFileName, in);22 if(isUp) {23 System.out.println("上传成功 !");24 } else{25 System.out.println("上传失败 !");26 }27 System.out.println("=============下载文件操作===============");28 //下载一个文件

29 boolean isDown =FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, downloadPath,30 uploadFileName, downloadFileName);31 if(isDown) {32 System.out.println("下载成功 !");33 } else{34 System.out.println("下载失败 !");35 }36 } catch(FileNotFoundException e) {37 e.printStackTrace();38 System.out.println(e);39 }40

41 }42 }

Main.java

FtpUtil.java:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packageFTP;2

3 importorg.apache.commons.net.ftp.FTPClient;4 importorg.apache.commons.net.ftp.FTPReply;5

6 import java.io.*;7 importjava.net.SocketException;8

9 public classFtpUtil {10

11 /**

12 * 获取FTPClient对象13 *14 *@paramftpHost15 * FTP主机服务器16 *@paramftpPassword17 * FTP 登录密码18 *@paramftpUserName19 * FTP登录用户名20 *@paramftpPort21 * FTP端口 默认为2122 *@return

23 */

24 public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, intftpPort,25 String Function) {26 FTPClient ftpClient = newFTPClient();27 try{28 ftpClient = newFTPClient();29 ftpClient.connect(ftpHost, ftpPort);//连接FTP服务器

30 ftpClient.login(ftpUserName, ftpPassword);//登陆FTP服务器

31 if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {32 System.out.println("未连接到FTP,用户名或密码错误。");33 ftpClient.disconnect();34 } else{35 System.out.println(Function + ":FTP连接成功。");36 }37 } catch(SocketException e) {38 e.printStackTrace();39 System.out.println("FTP的IP地址可能错误,请正确配置。");40 } catch(IOException e) {41 e.printStackTrace();42 System.out.println("FTP的端口错误,请正确配置。");43 }44 returnftpClient;45 }46

47 /**

48 * Description: 向FTP服务器上传文件49 *50 *@paramftpHost51 * FTP服务器hostname52 *@paramftpUserName53 * 账号54 *@paramftpPassword55 * 密码56 *@paramftpPort57 * 端口58 *@paramftpPath59 * FTP服务器中文件所在路径 格式: ftptest/aa60 *@paramfileName61 * ftp文件名称62 *@paraminput63 * 文件流64 *@return成功返回true,否则返回false65 */

66 public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, intftpPort,67 String ftpPath, String uploadFileName, InputStream input) {68 boolean issuccess = false;69 FTPClient ftpClient = null;70 try{71 intreply;72 ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort, "上传");73 reply =ftpClient.getReplyCode();74 System.out.println("上传reply:" +reply);75 if (!FTPReply.isPositiveCompletion(reply)) {76 ftpClient.disconnect();77 returnissuccess;78 }79 ftpClient.setControlEncoding("UTF-8"); //中文支持

80 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //传输类型

81 if (!ftpClient.changeWorkingDirectory(ftpPath)) {82 ftpClient.changeWorkingDirectory("/");83 String[] dirs = ftpPath.split("/");84 for(String dir : dirs) {85 ftpClient.makeDirectory(dir);86 ftpClient.changeWorkingDirectory(dir);87 }88 }89 ftpClient.enterLocalPassiveMode();//大部分用在Linux上

90 if (!ftpClient.storeFile(new String(uploadFileName.getBytes("GBK"), "iso-8859-1"), input)) {91 returnissuccess;92 }93 input.close();94 ftpClient.logout();95 issuccess = true;96 } catch(IOException e) {97 e.printStackTrace();98 } finally{99 if(ftpClient.isConnected()) {100 try{101 ftpClient.disconnect();102 } catch(IOException ioe) {103 }104 }105 }106 returnissuccess;107 }108

109 /*

110 * 从FTP服务器下载文件111 *112 * @param ftpHost FTP IP地址113 *114 * @param ftpUserName FTP 用户名115 *116 * @param ftpPassword FTP用户名密码117 *118 * @param ftpPort FTP端口119 *120 * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa121 *122 * @param localPath 下载到本地的位置 格式:H:/download123 *124 * @param fileName 文件名称125 */

126

127 public static boolean downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, intftpPort,128 String ftpPath, String downloadPath, String uploadFileName, String downloadFileName) {129 boolean issuccess = false;130 FTPClient ftpClient = null;131 try{132 ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort, "下载");133 ftpClient.setControlEncoding("UTF-8"); //中文支持

134 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);135 ftpClient.enterLocalPassiveMode(); //大部分用在Linux上

136 ftpClient.changeWorkingDirectory(ftpPath); //切换到ftp的服务器路径

137 File localFile = new File(downloadPath + File.separatorChar + downloadFileName);//设定要下载的路径

138 System.out.println("文件目录:" +localFile);139 OutputStream os = new FileOutputStream(localFile); //实例化

140 if (ftpClient.retrieveFile(new String(uploadFileName.getBytes("GBK"), "iso-8859-1"), os)) { //将文件写入到下载的文件中

141 issuccess = true;142 }143 os.close();144 ftpClient.logout();145 } catch(FileNotFoundException e) {146 System.out.println("没有找到" + ftpPath + "下载");147 e.printStackTrace();148 } catch(SocketException e) {149 System.out.println("连接FTP失败.");150 e.printStackTrace();151 } catch(IOException e) {152 e.printStackTrace();153 System.out.println("文件读取错误。");154 e.printStackTrace();155 }156 returnissuccess;157 }158 }

FtpUtil.java

六、总结

以上就是FTP实现简单的上传下载了。

遇到的坑是在上传的时候不能上传,我的不是中文命名问题,而是IIS配置权限问题,当时参考的百度经验里的ftp配置,结果权限中没有写入,导致不能上传。。。

连接的第9步没有勾选“写入”,(⊙o⊙)… :https://jingyan.baidu.com/article/0bc808fc408fa91bd585b94f.html

f1b62efeac6e5256f2e00ad8b3b6ec69.png

就到这里了,有什么问题评论里聊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值