b= file1.delete();删除总是失败

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

猜你喜欢

转载自kaizi1992.iteye.com/blog/2260831
b1