[英]Walking a Linux/Unix filesystem with Java?
我需要创建一个Java util,它将通过Unix(和/或Linux)文件系统递归,并建立目录结构的对象模型,检索文件信息-大小,创建日期,上次访问日期等-以及我需要在文件所在的物理存储设备上检索信息。 理想情况下,该实用程序将是可移植的。 我没有Java标准库的经验,只有Unix OS的经验有限。
是否有Java标准库可以处理Unix文件系统? 还是我必须通过某些API进行本地调用,然后担心可移植性? 我有什么选择?
特别查看Apache Commons IO和FileUtils.iterator() 。 这样您就可以浏览文件系统。 主要由于潜在的内存问题,使用迭代器比构建大量候选文件要好。
如果您需要对符号链接的特定访问权限,那么这可能还不够,您可能想查看JDK 7的早期版本。我知道Java 7的文件系统将具有一些围绕符号链接的功能 。
注意:许多Unix文件系统都会给您ctime
,它是inode创建日期,而不是文件创建日期。
在JDK7中,新的软件包java.nio.file
提供了围绕文件的有用实用程序。 特别是, java.nio.file.Files
类具有walkFileTree(..)
方法和其他与文件相关的实用程序功能。
请参阅JDK7 API文档: http : //docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
您可以使用: 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();
}
}
java.io.File是您的朋友在这里。 它具有多种方法,可让您列出目录的内容并确定所找到的是文件还是目录。 如果是目录,则只需要递归到该目录即可。 一旦您知道所拥有的对象是一个文件,便可以调用一些方法来获取特定的详细信息。
看看http://java.sun.com/j2se/1.5.0/docs/api/
我相信这也完全可移植
戴夫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.