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上传工具类不是本人写的】

相关文章
相关标签/搜索