FTP服务器上传下载工具类

转载,原文链接:https://www.jb51.net/article/69921.htm

亲测可用

需要引入maven依赖

<dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>

</dependency>

版本最好保持一致,不知道会不会有新版,我一开始用的旧版不行,可以自己尝试一下

对于使用文件进行交换数据的应用来说,使用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);

  }

  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值