java无法删除另一进程正在使用的文件

java无法删除另一进程正在使用的文件,java,delete-file,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 U

我有这个密码

 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”。我怎样才能做到这一点呢?

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

我想使用
sameSha1
打开
SHA1.txt
阅读它,但忘记关闭它

编辑:

根据您的评论,您在
sameSha1
中包含以下行:

String sha1Txt = new Scanner(new File("SHA1.txt")).useDelimiter("\\Z").next();
因此,您创建了一个scanner实例,但没有显式地关闭它。你应该这样做:

Scanner s = new Scanner(new File("SHA1.txt"));
try {
    String sha1Txt = s.useDelimiter("\\Z").next();
    ...
    return result;
}
finally {
    s.close();
}
或者正如@hustmphrr在Java 7中所建议的那样:

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

还有什么在使用这个文件,保持它打开?你能提供sameSha1实现吗?除了我使用的IDE之外,所有的程序都关闭了,并且它没有SHA1.txt文件open@dan_san_1,肯定有什么东西在锁着它:例外说明了同样多的事情。使用一些工具来找出这是怎么做的:或者转到保存它的目录,列出隐藏的文件,然后自己删除锁。在linux中,ls-a用于显示文件,并删除带有~。不确定Windows是否相同,但您可以在文件夹属性下显示隐藏的文件,并查看是否可以找到.lock文件。谢谢。在sameSha1中,我有以下内容:
String sha1Txt=new Scanner(新文件(“SHA1.txt”)。使用分隔符(\\Z”).next()。如何关闭它?在变量s中分配新的扫描仪(…),在返回之前调用
s.close()
您可以使用
尝试(扫描仪s=new Scanner(new File(“SHA1.txt”))
自动关闭文件。