java无法删除文件,被另一个进程使用

时间:2015-03-06 18:27:02

标签: java delete-file

我有这段代码

 import org.apache.commons.io.FileUtils;
    try {
        FileUtils.copyURLToFile(new URL(SHA1_LINK), new File("SHA1.txt"));
        if(!sameSha1()) {
            System.out.println("sha diferentes");
            FileUtils.copyURLToFile(new URL(LINK), new File(PROG));
        }
    } catch (Exception e) {
        System.out.println("Internet is off");
    }
    //delete SHA1 file
    Files.deleteIfExists(Paths.get("SHA1.txt"));

当我执行它时,它说

  

java.nio.file.FileSystemException
  该进程无法访问该文件,因为它正由另一个进程使用(在sun.nio.fs.WindowsException中)

sameSha1()我有这个:

String sha1Txt = new Scanner(new File("SHA1.txt")).useDelimiter("\\Z").next();

我想删除文件' SHA1.txt'。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

我想sameSha1 SHA1.txt打开sameSha1来阅读它,你忘了关闭它。

编辑:

在评论中,您在String sha1Txt = new Scanner(new File("SHA1.txt")).useDelimiter("\\Z").next(); 中包含以下行:

Scanner s = new Scanner(new File("SHA1.txt"));
try {
    String sha1Txt = s.useDelimiter("\\Z").next();
    ...
    return result;
}
finally {
    s.close();
}

因此,您创建了一个扫描程序实例,但未明确关闭它。你应该这样做:

try(Scanner s = new Scanner(new File("SHA1.txt"))) {
    String sha1Txt = s.useDelimiter("\\Z").next();
    ...
    return result;
}

或者@HuStmpHrrr在Java 7中建议:

{{1}}

答案 1 :(得分:0)

如果它被另一个进程使用,我猜其他一些程序已经打开了该文本文件。尝试关闭其他程序。