Java中的目录的FileDescriptor

时间:2013-12-11 11:23:56

标签: java directory file-descriptor

有没有办法像在C中一样用Java打开目录流?我需要一个打开目录的FileDescriptor。好吧,实际上只是fd的编号。

我尝试在CRIU链接的帮助下在Java中实现检查点/恢复功能。为此,我需要将一个RPC调用部署到CRIU服务。在那里,我必须提供已打开目录的FD的整数值,其中将存储过程的图像文件。

提前谢谢!

3 个答案:

答案 0 :(得分:2)

  

有没有办法在Java中打开目录流,就像在C?

中一样

不,没有。并非没有使用本机代码。

如果要“读取”(纯)Java中的目录,可以使用以下方法之一来执行此操作:

  • File.list() - 为您提供目录条目的名称作为字符串。
  • File.list(FilenameFilter) - 同上,但只返回匹配的目录条目。
  • File.listFiles() - 与list()类似,但返回File个对象。
  • 诸如此类
  • Files.newDirectoryStream(Path)为您提供了目录中条目的Path个对象的迭代器。

最后一个可以“接近”你想要实现的目标,但它不需要应用程序代码获取目录的文件描述符,或者应用程序在目录上执行低级“读取”

答案 1 :(得分:0)

private FileDescriptor openFile(String path)
        throws FileNotFoundException, IOException {
    File file = new File(path);
    FileOutputStream fos = new FileOutputStream(file);
    // remember th 'fos' reference somewhere for later closing it
    fos.write((new Date() + " Beginning of process...").getBytes());
    return fos.getFD();
}

答案 2 :(得分:-1)

您不需要Java中的FD。您所需要的只是对该文件的引用,您可以使用File file = new File("PathToYourFile");

简单地获取该文件

要读/写,您有Java中的Streams。你可以使用

    BufferedReader fileReader = new BufferedReader(new FileReader(new File("myFile.txt")));
    PrintWriter fileWriter = new PrintWriter(new FileWriter(new File("myFile.txt")));

甚至目录也是一个文件。您可以在文件对象上使用isDirectory()来检查它是目录还是文件。