有没有办法像在C中一样用Java打开目录流?我需要一个打开目录的FileDescriptor。好吧,实际上只是fd的编号。
我尝试在CRIU链接的帮助下在Java中实现检查点/恢复功能。为此,我需要将一个RPC调用部署到CRIU服务。在那里,我必须提供已打开目录的FD的整数值,其中将存储过程的图像文件。
提前谢谢!
答案 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()
来检查它是目录还是文件。