【问题标题】:How to atomically set the value of the file attribute in java?如何在java中原子地设置文件属性的值?
【发布时间】:2014-11-30 10:12:10
【问题描述】:

我需要在java中自动设置文件属性的值。我找到了方法

Path Files.setAttribute(Path path, String attribute, Object value, LinkOption... options)

但文档没有指定该值将自动设置。 请告诉我该怎么做。

【问题讨论】:

  • 在这种情况下,原子化是什么意思?在处理文件系统时,最好不要做任何假设,因为文件可以随时被其他进程更改。
  • 当我更改属性时,我必须确保在任何给定时间只有一个进程修改它

标签: java atomic file-attributes


【解决方案1】:

FileLock 可能是一个解决方案:

    Path path = new File("C:/Test/test.txt").toPath();

    FileChannel fc = FileChannel.open(path, StandardOpenOption.WRITE);
    FileLock lock = fc.tryLock();
    if (lock != null) {
        try {
            FileTime fileTime = FileTime.fromMillis(0);
            Files.setAttribute(path, "basic:creationTime", fileTime, LinkOption.NOFOLLOW_LINKS);
        } finally {
            lock.release();
        }
    }

【讨论】:

  • 如果这样做,请务必阅读 FileLock API 文档。它们更多是一种建议,而不是一种断言。哦,锁是给 JVM 的,而不是当前运行的线程。所以不要试图用多线程做事情并假设原子性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2011-03-16
  • 2014-06-09
  • 2013-10-04
  • 2023-03-03
相关资源
最近更新 更多