【问题标题】:Making a newly made file in java unreadable while its being written too使Java中新创建的文件在写入时也不可读
【发布时间】:2013-01-14 09:44:51
【问题描述】:

您好,我正在使用 java 中的 File 类来编写一个包含超过 100,000 行信息的 txt 文件。我在fedora linux上。在写入文件时,我不希望在完全完成之前读取它。

我认为在写入文件之前设置 setReadable(false) 然后最后将其设置为 true 会起作用,但没有人知道我该如何正确地做到这一点

谢谢。

【问题讨论】:

标签: java linux permissions


【解决方案1】:

使用 .tmp 扩展名编写它,然后在完成后将其移动/重命名为真正的扩展名

final File file = new File(filename + ".tmp");

// code to save the text to the file

file.renameTo(new File(filename+ ".txt")) 

.renameTo 是 linux 上的原子操作。

【讨论】:

  • renameTo 在 Windows 上不是原子的,请参见:stackoverflow.com/questions/1000183/…
  • @lbalazscs 他在他的问题中提到了fedora linux,它是原子的
  • 这不会阻止进程写入文件。 filename+".tmp" 仍然可以被任何进程写入。 Java NIO 包具有文件锁定功能。
【解决方案2】:

您应该使用transactions from Apache 来实现它。它允许您在单个事务中写入文件。在您提交之前,您的基本文件甚至都不存在

但您也可以单独完成。将文件写入其他位置并在完成后将其移动

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多