在sftp上傳後,須要刪除臨時文件。發現老是刪除不了。工具
代碼以下:線程
System.out.println(file1.isFile() +" "+file1);
System.out.println("是否存在"+file1.exists());
boolean b = false;
if(file1.exists()){
b= file1.delete();
}
System.out.println("--> b "+ b);
boolean b2=chkfile1.delete();
System.out.println("--> b2 "+ b2);get
運行結果:io
true E:\a\a\localPath\E_20151201_500_ORDER_GROUP.dat
是否存在true
--> b falsefor循環
--> b2 false百度
在中午斷點,等吃了飯走完斷點發現,居然刪除。ftp
------------------------------------------------------------------file
解決緣由:循環
百度了不少都說方法
1:流未關閉
2:文件被佔用
3:若是刪除的是文件夾,須要使用listfile進行處理。
但是我查詢本身代碼,發現我在調用sftp上傳的utils的時候,個人流都關閉了。怎麼都想不通。
沒辦法,寫了個線程,sleep了好久。
可是這不是解決辦法。
根據分析能夠知道。若是把sftp上傳方法註釋掉就能夠刪除了。鎖定目標後,
查看sftp上傳發現原來在sftp上傳後沒有關閉流。
修改以前sftp上傳代碼:
sftp.cd(directory);
for(String uploadFile : uploadFiles) {
File file=new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
}
修改後的代碼:
try {
sftp.cd(directory);
File file=new File(uploadFile);
FileInputStream files = new FileInputStream(file);
sftp.put(files, file.getName());
try {
files.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SftpException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
忽略上傳前的for循環。
總結:
流未關閉的可能是這種狀況。
出現狀況:
1:你本身所寫的代碼使用的流未關閉
2:調用工具類時候,工具類中的流未關閉。【鄙人就是遇到這個問題。由於sftp上傳工具類不是本人寫的】