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