用Java7删除文件

用Java7删除文件,java,java-7,Java,Java 7,我正在从事一个项目,其中我使用java.nio.*进行文件操作。基本上我的产品是在服务器上工作的,现在我正在使用Java7在服务器上创建文件 Files.createFile(path)//For creating file. 但是当我想用 Files.delete(path) 它给了我信息 The process cannot access the file because it is being used by another process.** 删除文件代码 Files.walkF

我正在从事一个项目,其中我使用
java.nio.*
进行文件操作。基本上我的产品是在服务器上工作的,现在我正在使用Java7在服务器上创建文件

Files.createFile(path)//For creating file.
但是当我想用

Files.delete(path)
它给了我信息

The process cannot access the file because it is being used by another process.**
删除文件代码

Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file,
                    BasicFileAttributes attrs) throws IOException {

                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException e)
                    throws IOException {
                if (e == null) {
                     Files.delete(dir);
                    return FileVisitResult.CONTINUE;
                } else {
                    // directory iteration failed
                    throw e;
                }
            }

        });
Files.walkFileTree(开始,新的SimpleFileVisitor(){
@凌驾
公共文件VisitResult visitFile(路径文件,
BasicFileAttributes(属性属性)引发IOException{
文件。删除(文件);
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult postVisitDirectory(路径目录,IOE异常)
抛出IOException{
如果(e==null){
删除(dir);
返回FileVisitResult.CONTINUE;
}否则{
//目录迭代失败
投掷e;
}
}
});

无法删除已被您的进程或其他进程锁定的文件。在windows上,文件默认是锁定的,在linux上,它们必须显式锁定

这个例子

Path path = FileSystems.getDefault().getPath("test.log");
Path file = Files.createFile(path);
Files.delete(file);

运行时没有错误

您无法删除已被您的进程或其他进程锁定的文件。在windows上,文件默认是锁定的,在linux上,它们必须显式锁定

这个例子

Path path = FileSystems.getDefault().getPath("test.log");
Path file = Files.createFile(path);
Files.delete(file);

运行时出错

要删除文件,必须获取文件处理程序(通常由创建该文件的线程拥有)。因此,如果一个线程创建了一个文件,那么另一个线程就不能删除它

请确保,当您删除文件时,服务器没有创建另一个线程,这是每个服务器代码上发生的情况


PS:如果您想要更多更好的答案,您必须提供更多信息

要删除文件,您必须获得文件处理程序(通常由创建它的线程拥有)。因此,如果一个线程创建了一个文件,那么另一个线程就不能删除它

请确保,当您删除文件时,服务器没有创建另一个线程,这是每个服务器代码上发生的情况


PS:如果您想要更多更好的答案,您必须提供更多信息

您是否关闭了所有使用给定文件引用的编写器?

您是否关闭了所有使用给定文件引用的编写器?

如果您使用swing组件打开文件,您可以使用
dispose()
用于打开文件的组件的方法。

如果使用swing组件打开文件,则可以对打开文件的组件使用
dispose()
方法。

在代码中的某个位置写入文件后,文件可能会保持打开状态。记住,在处理完文件/流/等后,始终要关闭它们。Java 7提供了一种称为“try with resources”的简洁机制,可以为您解决这一问题:除非您提供更多信息,否则恐怕没有什么可以说的了。在您将文件写入代码中的某个位置后,可能会出现重复的情况。记住,在处理完文件/流/等后,始终要关闭它们。Java7提供了一种称为“try with resources”的简洁机制,可以为您解决这一问题:除非您提供更多的信息,否则恐怕什么也说不出来。