java使用sfp上傳後,刪除臨時文件刪除不了

在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上傳工具類不是本人寫的】

相關文章
相關標籤/搜索