前些天寫好的工具類,后來從新測試的時候出現的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 }
以上是代碼,可能考慮的不夠全面。請謹慎采用!