前些天写好的工具类,后来从新测试的时候出现的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文件上传获取流对象空值问题
原文地址:https://www.cnblogs.com/lu-shuangbk/p/9128129.html