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