本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作,需要的朋友可以参考下

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案。

关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程。之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码。

FavFTPUtil.Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
package com.favccxx.favsoft.util;
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
  
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
  
public class FavFTPUtil {
    
  /**
   * 上传文件(可供Action/Controller层使用)
   * @param hostname FTP服务器地址
   * @param port  FTP服务器端口号
   * @param username  FTP登录帐号
   * @param password  FTP登录密码
   * @param pathname  FTP服务器保存目录
   * @param fileName  上传到FTP服务器后的文件名称
   * @param inputStream 输入文件流
   * @return
   */
  public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
    boolean flag = false;
    FTPClient ftpClient = new FTPClient();
    ftpClient.setControlEncoding("UTF-8");
    try {
      //连接FTP服务器
      ftpClient.connect(hostname, port);
      //登录FTP服务器
      ftpClient.login(username, password);
      //是否成功登录FTP服务器
      int replyCode = ftpClient.getReplyCode();
      if(!FTPReply.isPositiveCompletion(replyCode)){
        return flag;
      }
        
      ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
      ftpClient.makeDirectory(pathname);
      ftpClient.changeWorkingDirectory(pathname);
      ftpClient.storeFile(fileName, inputStream);
      inputStream.close();
      ftpClient.logout();
      flag = true;
    } catch (Exception e) {
      e.printStackTrace();
    } finally{
      if(ftpClient.isConnected()){
        try {
          ftpClient.disconnect();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    return flag;
  }
    
    
  /**
   * 上传文件(可对文件进行重命名)
   * @param hostname FTP服务器地址
   * @param port  FTP服务器端口号
   * @param username  FTP登录帐号
   * @param password  FTP登录密码
   * @param pathname  FTP服务器保存目录
   * @param filename  上传到FTP服务器后的文件名称
   * @param originfilename 待上传文件的名称(绝对地址)
   * @return
   */
  public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
    boolean flag = false;
    try {
      InputStream inputStream = new FileInputStream(new File(originfilename));
      flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return flag;
  }
    
  /**
   * 上传文件(不可以进行文件的重命名操作)
   * @param hostname FTP服务器地址
   * @param port  FTP服务器端口号
   * @param username  FTP登录帐号
   * @param password  FTP登录密码
   * @param pathname  FTP服务器保存目录
   * @param originfilename 待上传文件的名称(绝对地址)
   * @return
   */
  public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
    boolean flag = false;
    try {
      String fileName = new File(originfilename).getName();
      InputStream inputStream = new FileInputStream(new File(originfilename));
      flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return flag;
  }
    
    
  /**
   * 删除文件
   * @param hostname FTP服务器地址
   * @param port  FTP服务器端口号
   * @param username  FTP登录帐号
   * @param password  FTP登录密码
   * @param pathname  FTP服务器保存目录
   * @param filename  要删除的文件名称
   * @return
   */
  public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){
    boolean flag = false;
    FTPClient ftpClient = new FTPClient();
    try {
      //连接FTP服务器
      ftpClient.connect(hostname, port);
      //登录FTP服务器
      ftpClient.login(username, password);
      //验证FTP服务器是否登录成功
      int replyCode = ftpClient.getReplyCode();
      if(!FTPReply.isPositiveCompletion(replyCode)){
        return flag;
      }
      //切换FTP目录
      ftpClient.changeWorkingDirectory(pathname);
      ftpClient.dele(filename);
      ftpClient.logout();
      flag = true;
    } catch (Exception e) {
      e.printStackTrace();
    } finally{
      if(ftpClient.isConnected()){
        try {
          ftpClient.logout();
        } catch (IOException e) {
          
        }
      }
    }
    return flag;
  }
    
  /**
   * 下载文件
   * @param hostname FTP服务器地址
   * @param port  FTP服务器端口号
   * @param username  FTP登录帐号
   * @param password  FTP登录密码
   * @param pathname  FTP服务器文件目录
   * @param filename  文件名称
   * @param localpath 下载后的文件路径
   * @return
   */
  public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
    boolean flag = false;
    FTPClient ftpClient = new FTPClient();
    try {
      //连接FTP服务器
      ftpClient.connect(hostname, port);
      //登录FTP服务器
      ftpClient.login(username, password);
      //验证FTP服务器是否登录成功
      int replyCode = ftpClient.getReplyCode();
      if(!FTPReply.isPositiveCompletion(replyCode)){
        return flag;
      }
      //切换FTP目录
      ftpClient.changeWorkingDirectory(pathname);
      FTPFile[] ftpFiles = ftpClient.listFiles();
      for(FTPFile file : ftpFiles){
        if(filename.equalsIgnoreCase(file.getName())){
          File localFile = new File(localpath + "/" + file.getName());
          OutputStream os = new FileOutputStream(localFile);
          ftpClient.retrieveFile(file.getName(), os);
          os.close();
        }
      }
      ftpClient.logout();
      flag = true;
    } catch (Exception e) {
      e.printStackTrace();
    } finally{
      if(ftpClient.isConnected()){
        try {
          ftpClient.logout();
        } catch (IOException e) {
          
        }
      }
    }
    return flag;
  }
  
}

FavFTPUtilTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.favccxx.favsoft.util;
  
import junit.framework.TestCase;
  
public class FavFTPTest extends TestCase {
    
  public void testFavFTPUtil(){
    String hostname = "127.0.0.1";
    int port = 21;
    String username = "business";
    String password = "business";
    String pathname = "business/ebook";
    String filename = "big.rar";
    String originfilename = "C:\\Users\\Downloads\\Downloads.rar";
    FavFTPUtil.uploadFileFromProduction(hostname, port, username, password, pathname, filename, originfilename);
//   String localpath = "D:/";
      
//   FavFTPUtil.downloadFile(hostname, port, username, password, pathname, filename, localpath);
  }
  
}

以上是本文的全部内容,希望大家喜欢。

转载于:https://www.cnblogs.com/wxseng/p/9479574.html

Java通过FTP服务器上传下载文件的方法相关推荐

  1. linux使用ftp传递文件,linux ftp命令:(从远程ftp服务器上传下载文件)

    FTP的命令行格式为: ftp -v -d -i -n -g [主机名] ,其中 -v 显示远程服务器的所有响应信息: -n 限制ftp的自动登录,即不使用:.n etrc文件: -d 使用调试方式: ...

  2. 关于FileZilla连接FTP站点上传下载文件

    关于FileZilla连接FTP站点上传下载文件 浏览器搜索FileZilla官网:https://www.filezilla.cn/download 根据自己操作系统安装 安装完成之后的启动界面是这 ...

  3. 从服务器上传下载文件

    服务器上传下载文件 本文介绍了笔者使用过的一些服务器上传下载文件的一些方法. 使用ftp的软件进行文件的上传下载 使用netsarang的xftp进行文件上传下载 ,xftp官方下载地址.示意图如下: ...

  4. python get 下载 目录_python实现支持目录FTP上传下载文件的方法

    本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. #!/usr/bin/en ...

  5. java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...

  6. Linux 终端访问 FTP 及 上传下载 文件

    今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上. google 一下. ...

  7. ftp文件推送 linux_Linux 终端访问 FTP 及 上传下载 文件

    今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...

  8. Linux| 向linux服务器上传下载文件方式收集(scp)

    scp [优点]简单方便,安全可靠:支持限速参数 [缺点]不支持排除目录 [用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式, ...

  9. Linux 终端訪问 FTP 及 上传下载 文件

    今天同事问我一个问题,在Linux 下訪问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上. google 一下. ...

最新文章

  1. 苹果笔记本电脑电池保养细则
  2. CommunityServer 2.0 RTM时间是:2006-02-17 --Scott Watermasysk今天中午
  3. 程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26
  4. 计算机网络中的时延有哪几部分,计算机网络中的四种延迟分别是什么?
  5. 转行做产品经理需要学什么?
  6. python保存任意object的数据到本地(python的序列化与反序列化)
  7. 《电路》邱关源 思维导图 第七章-一阶和二阶电路的时域分析
  8. 计算机网络技术评估与备选方案,创业学复习提纲
  9. 台式计算机把光驱改成硬盘,台式机光驱位怎么安装硬盘
  10. 伺服驱动器PID调节
  11. Curator实现分布式锁的基本原理
  12. cf(穿越火线)进游戏乱码问题解决方案
  13. MPC5744P-CAN模块
  14. 裴波那契数列及其递归算法
  15. asterisk安装步骤
  16. 网吧XP无盘系统集成优化及母盘封装
  17. listview条目有下划线
  18. 看穿读心术系列( 基斯巴利)
  19. .启动ARCGIS提示“Automation错误”
  20. mkfs.ubifs/hashtable/hashtable_itr.c:42:1: error: redefinition of ‘hashtable_iterator_key

热门文章

  1. 百练2810:完美立方
  2. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)
  3. 【前端3】jquary:页面加载,选择器,隔行换色,Dom,全选,动画,遍历,广告/抽奖,表单校验插件
  4. Dsp BootLoader的学习
  5. Windows下编程需要看哪些书
  6. 【Qt】MainWindow窗口状态栏
  7. 【MFC】CDialog类详解
  8. 【Linux】一步一步学Linux——ipcalc命令(191)
  9. 如何中断JAVA线程
  10. 改变窗口背景_办公软件操作技巧063:如何设置ppt母版背景