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);

运行结果:

true E:\a\a\localPath\E_20151201_500_ORDER_GROUP.dat
是否存在true
--> b false

--> b2 false

在中午断点,等吃了饭走完断点发现,竟然删除。

------------------------------------------------------------------

解决原因:

百度了很多都说

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

你可能感兴趣的:(java,File)