我需要创建一个Java util,它将通过Unix(和/或Linux)文件系统进行处理,并构建目录结构的对象模型,检索文件信息 - 大小,创建日期,上次访问日期等 - 以及我需要检索文件所在的物理存储设备上的信息。理想情况下,这个util可以移植。我没有Java标准库的经验,只有有限的Unix OS经验。
是否有Java标准库可以处理Unix文件系统?或者我是否必须通过某些API进行本机调用,然后担心可移植性?我有什么选择?
答案 0 :(得分:5)
特别查看Apache Commons IO和FileUtils.iterator()。那将允许您导航文件系统。使用迭代器比构建大量候选文件要好,主要是因为潜在的内存问题。
如果您需要特殊访问符号链接,那么这可能还不够,您可能需要查看JDK 7的早期版本。我了解Java 7的文件系统将具有some capabilities surrounding symlinks。
注意:许多Unix文件系统会为您提供ctime
,这是 inode 创建日期,而不是文件创建日期。
答案 1 :(得分:3)
您可以使用:java.io.File因为它可能不包含您需要的所有信息(例如物理存储的信息),但它可以帮助您创建所需的大部分逻辑。
您可以查看muucommander这是一个开源文件管理器。他们已经做了很多工作来制作这类东西,而且代码非常干净且易于访问。
这是一个工作样本:
import java.io.File;
public class FileWalkTest {
public static void main(String[] args) {
File file = new File("/Users/oscarreyes/code/");
printInfo( file );
}
public static void printInfo( File dir ) {
for( File child : dir.listFiles() ) {
if( child.isDirectory() ) {
System.out.println( "\n"+child.getAbsolutePath());
printInfo( child );
} else {
System.out.printf("%s read:%s write:%s xecute:%s, size:%d lastModified:%d %n", child.getName(), child.canRead(), child.canWrite(), child.canExecute(), child.length(), child.lastModified());
}
}
System.out.println();
}
}
答案 2 :(得分:3)
在JDK7中,新包java.nio.file
提供了有用的文件实用程序。特别是,java.nio.file.Files
类具有walkFileTree(..)
方法和其他与文件相关的实用程序函数。
请参阅JDK7 API文档:http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
答案 3 :(得分:2)
java.io.File是你的朋友。它有许多方法,允许您列出目录的内容,并确定它找到的是文件还是目录。如果它是一个目录,那么你只需要递归到它。一旦你知道你所拥有的对象是一个文件,那么你可以调用一些方法来获取具体的细节。
查看http://java.sun.com/j2se/1.5.0/docs/api/
我相信这完全便于携带
戴夫