当前位置:   article > 正文

解决FTPClient.retrieveFileStream()读取为null的解决方法

解决FTPClient.retrieveFileStream()读取为null的解决方法

前提:FTPClient能登录成功,changeWorkingDirectory返回true;文件名无误。

代码:

  1. /**
  2. * @Author WangChangDian
  3. * @Description //TODO 判断文件是否存在
  4. * @Date 18:18 2020/2/1
  5. * @param filePath--指定绝对路径的文件
  6. * @return
  7. */
  8. public static boolean isFTPFileExist(String filePath){
  9. /* 测试数据
  10. * url:服务器ip
  11. * port : 21
  12. * ftpUsername:root
  13. * ftpPassword :12345
  14. * filePath:aa/bb/cc/test.jpg
  15. **/
  16. FTPClient ftp = new FTPClient();
  17. try {
  18. // 连接ftp服务器
  19. ftp.connect(url, port);
  20. // 登陆
  21. ftp.login(ftpUsername, ftpPassword);
  22. // 检验登陆操作的返回码是否正确
  23. if(!FTPReply.isPositiveCompletion(ftp.getReplyCode())){
  24. ftp.disconnect();
  25. return false;
  26. }
  27. ftp.enterLocalActiveMode();
  28. // 设置文件类型为二进制,与ASCII有区别
  29. ftp.setFileType(FTP.BINARY_FILE_TYPE);
  30. // 设置编码格式
  31. ftp.setControlEncoding("GBK");
  32. // 提取绝对地址的目录以及文件名
  33. filePath = filePath.replace("ftp://"+url+":"+port+"/", "");
  34. String dir = filePath.substring(0, filePath.lastIndexOf("/"));
  35. String file = filePath.substring(filePath.lastIndexOf("/")+1);
  36. // 进入文件所在目录,注意编码格式,以能够正确识别中文目录
  37. boolean cdStatus = ftp.changeWorkingDirectory(new String(dir.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
  38. // 检验文件是否存在
  39. InputStream is = ftp.retrieveFileStream(new String(file.getBytes("GBK"),FTP.DEFAULT_CONTROL_ENCODING));
  40. if(is == null || ftp.getReplyCode() == FTPReply.FILE_UNAVAILABLE){
  41. return false;
  42. }
  43. if(is != null){
  44. is.close();
  45. ftp.completePendingCommand();
  46. }
  47. return true;
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }finally{
  51. if(ftp != null){
  52. try {
  53. ftp.disconnect();
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }
  59. return false;
  60. }

如果 “is”为null,请检查服务器根目录权限配置,务必提供读取权限,我直接给根目录及其所有子目录 最高权限,如图:

再次运行代码,发现“is”有值,说明读取到文件了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/255562
推荐阅读
相关标签
  

闽ICP备14008679号