关于ftp文件上传获取流对象空值问题

Posted lu-shuangbk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ftp文件上传获取流对象空值问题相关的知识,希望对你有一定的参考价值。

 

前些天写好的工具类,后来从新测试的时候出现的ftp.storeFileStream获得不到流对象。切出现等待时间的问题。

跟踪了代码,登录没有问题!进入ftp看了一些目录结构和文件。发现文件已经创建,但是里面没有内容。估计就是流对象无法写入内容的原因。

针对这个问题去网上查看了一些资料,再对比一些自己的代码。发现自己在登陆后没有做退出和断开连接处理,加上这些后问题解决了。

下面是代码:

 

 1 public static boolean putFileToFtp(File file,String newFilePathName){
 2         boolean flag = false;
 3         //创建一个ftp客户端
 4         FTPClient ftp = getClient();
 5          try {
 6              //登录
 7                 ftp.connect(REHOSTNAME, Integer.parseInt(REPORT));
 8                 flag = ftp.login(REUSERNAME, REPASSWORD);
 9                 if(flag){
10                     //设置上传目录 
11                     ftp.enterLocalPassiveMode();
12                     ftp.setCharset(Charset.forName("UTF-8"));
13                     ftp.setControlEncoding("UTF-8");
14                   //设置文件类型(二进制) 
15                     ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
16                   //文件流输出
17                     OutputStream os = ftp.storeFileStream(RETRUMPETHESERVER+"/"+newFilePathName);
18                     if(os!=null){
19                         FileInputStream fis = new FileInputStream(file);
20                         byte[] b = new byte[1024];
21                         int len = 0;
22                         while ((len = fis.read(b)) != -1) {
23                             os.write(b,0,len);
24                         }
25                         fis.close();
26                         os.close();
27                         ftp.logout();
28                         flag = true;
29                     }else{
30                         ftp.logout();
31                         return false;
32                     }
33                 }else{
34                     ftp.disconnect();
35                     return false;
36                 }
37                 
38                 
39             } catch (IOException e) {
40                 e.printStackTrace();
41                 return false;
42             } finally { 
43                 try { 
44                     ftp.disconnect(); 
45                 } catch (IOException e) { 
46                     e.printStackTrace(); 
47                     throw new RuntimeException("关闭FTP连接发生异常!", e); 
48                 } 
49             }
50          return flag;  
51     }

以上是代码,可能考虑的不够全面。请谨慎采用!

以上是关于关于ftp文件上传获取流对象空值问题的主要内容,如果未能解决你的问题,请参考以下文章

关于获取上传文件为空的问题?

FTP上传下载文件(面向对象版)

java在浏览器上获取FTP读文件路径

关于libcurl库如何在ftp上创建文件和文件夹

ftp上传文件

获取FTP目录中的所有文件