设为首页 收藏本站
查看: 1465|回复: 0

Java 利用Apache Commons Net 实现 FTP文件上传下载

[复制链接]

尚未签到

发表于 2015-5-28 09:54:54 | 显示全部楼层 |阅读模式
  Java 利用Apache Commons Net 实现 FTP文件上传下载 [转]



  1 package woxingwosu;
  2
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.FileInputStream;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.text.SimpleDateFormat;
  9 import java.util.Comparator;
10 import java.util.Properties;
11 import java.util.TreeSet;
12 import org.apache.commons.io.FileUtils;
13 import org.apache.commons.net.ftp.FTP;
14 import org.apache.commons.net.ftp.FTPClient;
15 import org.apache.commons.net.ftp.FTPClientConfig;
16 import org.apache.commons.net.ftp.FTPFile;
17 import org.apache.commons.net.ftp.FTPReply;
18
19 /**
20 * 其实JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并没有提供相应文档,
21 * 因为这里面的包,不被官方支持,建议不要使用。我们可以使用第三方提供的包apache.commons。
22 * apache.commons的包,都有文档,方便使用
23 * 另外IBM也有提供一个ftp包,我没有用过,有兴趣的可以去研究一下
24 * @commons-net:http://apache.mirror.phpchina.com/commons/net/binaries/commons-net-1.4.1.zip
25 * @jakarta-oro:http://mirror.vmmatrix.net/apache/jakarta/oro/source/jakarta-oro-2.0.8.zip
26 * @commons-io:http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip
27 * @author 我行我素
28 * @2007-08-03
29 */
30 public class MiniFtp {
31     private static String username;
32     private static String password;
33     private static String ip;
34     private static int port;
35     private static Properties property=null;//配置
36     private static String configFile;//配置文件的路径名
37     
38     private static FTPClient ftpClient=null;
39     private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm");
40     
41     private static final String [] FILE_TYPES={"文件","目录","符号链接","未知类型"};
42     
43     public static void main(String[] args) {
44          setConfigFile("woxingwosu.properties");//设置配置文件路径
45          connectServer();
46          listAllRemoteFiles();//列出所有文件和目录
47          changeWorkingDirectory("webroot");//进入文件夹webroot
48          listRemoteFiles("*.jsp");//列出webroot目录下所有jsp文件
49          setFileType(FTP.BINARY_FILE_TYPE);//设置传输二进制文件
50          uploadFile("woxingwosu.xml","myfile.xml");//上传文件woxingwosu.xml,重新命名为myfile.xml
51          renameFile("viewDetail.jsp", "newName.jsp");//将文件viewDetail.jsp改名为newName.jsp
52          deleteFile("UpdateData.class");//删除文件UpdateData.class
53          loadFile("UpdateData.java","loadFile.java");//下载文件UpdateData.java,并且重新命名为loadFile.java
54          closeConnect();//关闭连接
55      }
56     
57     /**
58       * 上传文件
59       * @param localFilePath--本地文件路径
60       * @param newFileName--新的文件名
61      */
62     public static void uploadFile(String localFilePath,String newFileName){
63          connectServer();
64         //上传文件
65          BufferedInputStream buffIn=null;
66         try{
67              buffIn=new BufferedInputStream(new FileInputStream(localFilePath));
68              ftpClient.storeFile(newFileName, buffIn);
69          }catch(Exception e){
70              e.printStackTrace();
71          }finally{
72             try{
73                 if(buffIn!=null)
74                      buffIn.close();
75              }catch(Exception e){
76                  e.printStackTrace();
77              }
78          }
79      }
80     
81     /**
82       * 下载文件
83       * @param remoteFileName --服务器上的文件名
84       * @param localFileName--本地文件名
85      */
86     public static void loadFile(String remoteFileName,String localFileName){
87          connectServer();
88         //下载文件
89          BufferedOutputStream buffOut=null;
90         try{
91              buffOut=new BufferedOutputStream(new FileOutputStream(localFileName));
92              ftpClient.retrieveFile(remoteFileName, buffOut);
93          }catch(Exception e){
94              e.printStackTrace();
95          }finally{
96             try{
97                 if(buffOut!=null)
98                      buffOut.close();
99              }catch(Exception e){
100                  e.printStackTrace();
101              }
102          }
103      }
104     
105     /**
106       * 列出服务器上所有文件及目录
107      */
108     public static void listAllRemoteFiles(){
109          listRemoteFiles("*");
110      }
111
112     /**
113       * 列出服务器上文件和目录
114       * @param regStr --匹配的正则表达式
115      */
116      @SuppressWarnings("unchecked")
117     public static void listRemoteFiles(String regStr){
118          connectServer();
119         try{
120              FTPFile[] files=ftpClient.listFiles(regStr);
121             if(files==null||files.length==0)
122                  System.out.println("There has not any file!");
123             else{
124                  TreeSet fileTree=new TreeSet(
125                         new Comparator(){
126                             //先按照文件的类型排序(倒排),然后按文件名顺序排序
127                             public int compare(Object objFile1,Object objFile2){
128                                 if(objFile1==null)
129                                     return -1;
130                                 else if(objFile2==null)
131                                     return 1;
132                                 else{
133                                      FTPFile file1=(FTPFile)objFile1;
134                                      FTPFile file2=(FTPFile)objFile2;
135                                     if(file1.getType()!=file2.getType())
136                                         return file2.getType()-file1.getType();
137                                     else
138                                         return file1.getName().compareTo(file2.getName());
139                                  }
140                              }
141                          }
142                  );
143                 for(FTPFile file:files)
144                      fileTree.add(file);
145                  System.out.printf("%-35s%-10s%15s%15s\n","名称","类型","修改日期","大小");
146                 for(FTPFile file:fileTree){
147                      System.out.printf("%-35s%-10s%15s%15s\n",iso8859togbk(file.getName()),FILE_TYPES[file.getType()]
148                              ,dateFormat.format(file.getTimestamp().getTime()),FileUtils.byteCountToDisplaySize(file.getSize()));
149                  }
150              }
151          }catch(Exception e){
152              e.printStackTrace();
153          }
154      }
155     
156     /**
157       * 关闭连接
158      */
159     public static void closeConnect(){
160         try{
161             if(ftpClient!=null){
162                  ftpClient.logout();
163                  ftpClient.disconnect();
164              }
165          }catch(Exception e){
166              e.printStackTrace();
167          }
168      }
169     
170     /**
171       * 设置配置文件
172       * @param configFile
173      */
174     public static void setConfigFile(String configFile) {
175          MiniFtp.configFile = configFile;
176      }
177     
178     /**
179       * 设置传输文件的类型[文本文件或者二进制文件]
180       * @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE
181      */
182     public static void setFileType(int fileType){
183         try{
184              connectServer();
185              ftpClient.setFileType(fileType);
186          }catch(Exception e){
187              e.printStackTrace();
188          }
189      }
190     
191     /**
192       * 扩展使用
193       * @return
194      */
195     protected static FTPClient getFtpClient(){
196          connectServer();
197         return ftpClient;
198      }
199
200     /**
201       * 设置参数
202       * @param configFile --参数的配置文件
203      */
204     private static void setArg(String configFile){
205          property=new Properties();
206          BufferedInputStream inBuff=null;
207         try{
208              inBuff=new BufferedInputStream(new FileInputStream(configFile));
209              property.load(inBuff);
210              username=property.getProperty("username");
211              password=property.getProperty("password");
212              ip=property.getProperty("ip");
213              port=Integer.parseInt(property.getProperty("port"));
214          }catch(Exception e){
215              e.printStackTrace();
216          }finally{
217             try{
218                 if(inBuff!=null)
219                      inBuff.close();
220              }catch(Exception e){
221                  e.printStackTrace();
222              }
223          }
224      }
225     
226     /**
227       * 连接到服务器
228      */
229     public static void connectServer() {
230         if (ftpClient == null) {
231             int reply;
232             try {
233                  setArg(configFile);
234                  ftpClient=new FTPClient();
235                  ftpClient.setDefaultPort(port);
236                  ftpClient.configure(getFtpConfig());
237                  ftpClient.connect(ip);
238                  ftpClient.login(username, password);
239                  ftpClient.setDefaultPort(port);
240                  System.out.print(ftpClient.getReplyString());
241                  reply = ftpClient.getReplyCode();
242
243                 if (!FTPReply.isPositiveCompletion(reply)) {
244                      ftpClient.disconnect();
245                      System.err.println("FTP server refused connection.");
246                  }
247              } catch (Exception e) {
248                  System.err.println("登录ftp服务器【"+ip+"】失败");
249                  e.printStackTrace();
250              }
251          }
252      }
253     
254     /**
255       * 进入到服务器的某个目录下
256       * @param directory
257      */
258     public static void changeWorkingDirectory(String directory){
259         try{
260              connectServer();
261              ftpClient.changeWorkingDirectory(directory);
262          }catch(IOException ioe){
263              ioe.printStackTrace();
264          }
265      }
266     
267     /**
268       * 返回到上一层目录
269      */
270     public static void changeToParentDirectory(){
271         try{
272              connectServer();
273              ftpClient.changeToParentDirectory();
274          }catch(IOException ioe){
275              ioe.printStackTrace();
276          }
277      }
278     
279     /**
280       * 删除文件
281      */
282     public static void deleteFile(String filename){
283         try{
284              connectServer();
285              ftpClient.deleteFile(filename);
286          }catch(IOException ioe){
287              ioe.printStackTrace();
288          }
289      }
290     
291     /**
292       * 重命名文件
293       * @param oldFileName --原文件名
294       * @param newFileName --新文件名
295      */
296     public static void renameFile(String oldFileName,String newFileName){
297         try{
298              connectServer();
299              ftpClient.rename(oldFileName, newFileName);
300          }catch(IOException ioe){
301              ioe.printStackTrace();
302          }
303      }
304     
305     /**
306       * 设置FTP客服端的配置--一般可以不设置
307       * @return
308      */
309     private static FTPClientConfig getFtpConfig(){
310          FTPClientConfig ftpConfig=new FTPClientConfig(FTPClientConfig.SYST_UNIX);
311          ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
312         return ftpConfig;
313      }
314     
315     /**
316       * 转码[ISO-8859-1 ->   GBK]
317       *不同的平台需要不同的转码
318       * @param obj
319       * @return
320      */
321     private static String iso8859togbk(Object obj){
322         try{
323             if(obj==null)
324                 return "";
325             else
326                 return new String(obj.toString().getBytes("iso-8859-1"),"GBK");
327          }catch(Exception e){
328             return "";
329          }
330      }
331 }
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71388-1-1.html 上篇帖子: 隔离 FTP 用户 下篇帖子: ftp连接ubuntu
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表