代码之家  ›  专栏  ›  技术社区  ›  grahamrb

如何使用Java7文件API等待操作完成?

  •  2
  • grahamrb  · 技术社区  · 5 年前

    我正在编写一些java代码,创建一个目录,然后将一些文件放在该目录中。我不关心文件的创建顺序,但是,要成功创建文件,需要先退出目录。

    java.nio.Files api,因为它有一套非常优雅的方法来处理文件和目录。

    虽然很高兴 Files 类是非阻塞的,这意味着目录并不总是存在。有没有“正确”的方法来确定 Files.createDirectories(path) 是否已完成?

    Files.createDirectories(path);
    Files.write(filename1, "some content".getBytes());
    Files.write(filename2, "some other content".getBytes());
    

    path /tmp/blah filename1 /tmp/blah/foo filename2 你知道吗= /tmp/blah/bar

    显然,我可以使用其他类或库(比如Commons IO)来实现这一点,但是java.nio.Files文件很不错。

    2 回复  |  直到 5 年前
        1
  •  3
  •   LppEdd    5 年前

    我想你误解了。这些操作实际上是同步的,所以你可以到这里来。 Files.write 使用 java.io.OutputStream 例如。

    createDirectory 对于Linux。
    在窗户上, 创建目录 使用 CreateDirectory WinAPI函数。

    WindowsNativeDispatcher.CreateDirectory(var3.getPathForWin32Calls(), var4.address() /* Security descriptor */);
    

    Buffers , Channels Selectors .

        2
  •  1
  •   grahamrb    5 年前

    blah/foo blah/bar 而不是文件调用 foo 在一个名为 blah . 我刚刚切换到传递路径对象,而不是文件对象来表示我的文件和目录,一切正常。

        3
  •  1
  •   Some Name    5 年前

    有没有“正确”的方法来确定

    它一回来就完成了。这很可能是一个简单的包装 mkdir(2)

    而且,非阻塞语义对常规文件没有影响(至少在Linux中,至少现在是这样) http://man7.org/linux/man-pages/man2/open.2.html

    O\u NONBLOCK或O\u NDELAY

    阻塞设备;也就是说,I/O操作将(短暂地)阻塞 当需要设备活动时,无论