1

我正在开发一个java.nio.*用于文件操作的项目。基本上我的产品正在服务器上运行,现在我正在使用 Java 7 在服务器上创建文件。

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;
                }
            }

        });
4

4 回答 4

4

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

这个例子

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

运行没有错误

于 2012-07-26T13:12:05.690 回答
0

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

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

PS:如果您想要更多更好的答案,您将不得不提供更多信息

于 2012-07-26T13:12:28.687 回答
0

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

于 2013-08-11T17:03:22.613 回答
0

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

于 2012-07-26T13:13:15.400 回答