相关疑难解决方法(0)

在JVM正常退出后,Files.createTempDirectory是否删除目录?

Files.createTempDirectoryJVM正常退出后是否删除目录?或者我是否需要手动递归删除临时目录内容?

java

28
推荐指数
3
解决办法
3万
查看次数

DELETE_ON_CLOSE的用处

互联网上有很多例子显示如何使用StandardOpenOption.DELETE_ON_CLOSE,例如:

Files.write(myTempFile, ..., StandardOpenOption.DELETE_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)

其他示例类似地使用Files.newOutputStream(..., StandardOpenOption.DELETE_ON_CLOSE).

我怀疑所有这些例子都可能存在缺陷.写一个文件的目的是你要在某个时候读回来; 否则,为什么还要写呢?但是,在您有机会阅读之前,DELETE_ON_CLOSE会不会导致文件被删除?

如果你创建一个工作文件(用于处理太大而无法保留在内存中的大量数据),那么你不会使用RandomAccessFile它,它允许读写访问吗?但是,RandomAccessFile据我所知,并没有为您提供指定DELETE_ON_CLOSE的选项.

那么有人能告诉我DELETE_ON_CLOSE 实际上有用吗?

java nio

9
推荐指数
1
解决办法
1398
查看次数

DELETE_ON_CLOSE在Linux上关闭之前删除文件

我使用Java 7 nio API获得以下代码:

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class TestDeleteOnClose {

    public static void main(String[] args) throws IOException {
        Path tmp = Files.createTempFile("a", "b");
        OutputStream out = Files.newOutputStream(tmp, StandardOpenOption.DELETE_ON_CLOSE);

        ObjectOutputStream os = new ObjectOutputStream(out);

        os.write(0);

        os.flush();
        System.out.println(Files.exists(tmp));
        os.close();
        System.out.println(Files.exists(tmp));
    }
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,我看到了我的期望,即true false.在Linux上我看到了false false.这是预期的吗?难道我做错了什么?文件被过早删除的事实是有问题的,因为我需要测试它的大小,例如在写入之后.

我在Linux和Windows上使用jdk7u25,并且可以在具有RedHat或ArchLinux的机器上重现.

编辑:即使我在另一次调用os.write()之前测试文件是否存在,我被告知该文件不再存在.如果我用CREATE选项打开文件,那么我会看到true true.

java linux nio

2
推荐指数
1
解决办法
1441
查看次数

标签 统计

java ×3

nio ×2

linux ×1