执行操作后无法删除文件

时间:2016-09-12 10:06:58

标签: java

即使关闭相应的读者和编写者,也无法删除文件。 权限存在于文件中 file.delete()返回false 我的代码

main(){
        try{
        File file=new File(path);// Path where the file is present
        FileReader reader = new FileReader(path); 
        BufferedReader br = new BufferedReader(reader); 
        FileWriter writer = new FileWriter(pathOther);
        BufferedWriter wr = new BufferedWriter(writer);
        // Readers and writers for i/o operations
       while((String str=br.readLine())!=null){ 
       wr.write(str);                    // Copying to another file
       }
       }catch(Exception e){}
       finally{
        reader.close(); //close reader

        writer.close(); //close writer
        file.delete(); //This returns false

}

3 个答案:

答案 0 :(得分:2)

猜测关于发生了什么事情是你关闭BufferedReader但是让false保持打开状态,这会留下一些文件句柄。然后,当您尝试删除该文件时,它会返回File file = new File(path); try { br = new BufferedReader(new FileReader(file)); // use the reader ... } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) br.close(); } catch (IOException ex) { ex.printStackTrace(); } } // now close the file file.delete(); ,因为其他东西上有句柄。

请尝试以下代码:

path

<强>更新

在测试上面的代码时,我注意到了其他一些也可能导致您看到的观察结果。如果file.delete处的文件不存在,则逻辑调用file.exists()也会因此失败。因此,在尝试删除文件之前,应确保文件确实存在。您可以致电foreach (string s in links) { using (WebClient w = new WebClient()) { try { Console.WriteLine("Attempting to download " + s); w.OpenRead(s); string content = w.ResponseHeaders["Content-Disposition"]; string filename = new ContentDisposition(content).FileName; w.DownloadFile(new Uri(s), _directory + filename); Console.WriteLine("Downloaded " + filename); } catch(WebException e) { Console.WriteLine(e.Message); } } } 进行检查。

答案 1 :(得分:0)

首先,您应该关闭BufferedReader而不是FileReaderBufferedReader将依次调用close()上的FileReader

所以而不是:

reader.close(); //close reader

做的:

br.close();

(并省略完整的冗余评论)。

此外,由于File.delete()只返回一个布尔值,并且没有告诉您为什么它失败了,您可以通过调用Files.delete来获取更多信息:

try {
    Files.delete(file.toPath());
} catch (IOException e) {
    // e now contains information about why it can't delete.
}

答案 2 :(得分:0)

什么都不会打CALL FUNCTION 'DB_TRUNCATE_TABLE' EXPORTING tabname = 'ZWFM_T_LOGS'. COMMIT WORK.