Java用FTP实现简单的上传下载
2020-12-13 01:50
标签:选择 权限 inf make rar open path new mamicode 2019-06-12 22:28:33 已经是快四年的博客园用户了,今天实在是因为遇到的坑太蛋疼了,所以写好之后想直接发个博客。 下图是FTP的练习截图: 用到了这三个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中没有任何文件),图片好大呀,暂时还不会改大小,会改了我再改一下: 员工信息表.txt 下图: 之后就开始代码发布阶段了: Main.java: FtpUtil.java: 以上就是FTP实现简单的上传下载了。 遇到的坑是在上传的时候不能上传,我的不是中文命名问题,而是IIS配置权限问题,当时不知道在哪里参考的ftp配置,没有选择写入,导致不能上传。。。 好了,下面是参考的博客,谢谢以下的博主大佬 https://www.cnblogs.com/yingyujyf/p/6933823.html https://blog.csdn.net/h_tinkinginjava/article/details/80048043 (我把这位博主代码中的UTF-8改成了GBK好用了,UTF-8上传的时候中文文件名是乱码) Java用FTP实现简单的上传下载 标签:选择 权限 inf make rar open path new mamicode 原文地址:https://www.cnblogs.com/gbn007/p/11011262.html 1 package FTP;
2
3 import java.io.*;
4
5 public class Main {
6 public static void main(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(new File(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 }
1 package FTP;
2
3 import org.apache.commons.net.ftp.FTPClient;
4 import org.apache.commons.net.ftp.FTPReply;
5
6 import java.io.*;
7 import java.net.SocketException;
8
9 public class FtpUtil {
10
11 /**
12 * 获取FTPClient对象
13 *
14 * @param ftpHost
15 * FTP主机服务器
16 * @param ftpPassword
17 * FTP 登录密码
18 * @param ftpUserName
19 * FTP登录用户名
20 * @param ftpPort
21 * FTP端口 默认为21
22 * @return
23 */
24 public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
25 String Function) {
26 FTPClient ftpClient = new FTPClient();
27 try {
28 ftpClient = new FTPClient();
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 return ftpClient;
45 }
46
47 /**
48 * Description: 向FTP服务器上传文件
49 *
50 * @param ftpHost
51 * FTP服务器hostname
52 * @param ftpUserName
53 * 账号
54 * @param ftpPassword
55 * 密码
56 * @param ftpPort
57 * 端口
58 * @param ftpPath
59 * FTP服务器中文件所在路径 格式: ftptest/aa
60 * @param fileName
61 * ftp文件名称
62 * @param input
63 * 文件流
64 * @return 成功返回true,否则返回false
65 */
66 public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
67 String ftpPath, String uploadFileName, InputStream input) {
68 boolean issuccess = false;
69 FTPClient ftpClient = null;
70 try {
71 int reply;
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 return issuccess;
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 return issuccess;
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 return issuccess;
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/aa
121 *
122 * @param localPath 下载到本地的位置 格式:H:/download
123 *
124 * @param fileName 文件名称
125 */
126
127 public static boolean downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
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 return issuccess;
157 }
158 }
下一篇:HTML学习笔记02