使用Java走Linux / Unix文件系统?

时间:2009-12-17 20:43:38

标签: java unix filesystems

我需要创建一个Java util,它将通过Unix(和/或Linux)文件系统进行处理,并构建目录结构的对象模型,检索文件信息 - 大小,创建日期,上次访问日期等 - 以及我需要检索文件所在的物理存储设备上的信息。理想情况下,这个util可以移植。我没有Java标准库的经验,只有有限的Unix OS经验。

是否有Java标准库可以处理Unix文件系统?或者我是否必须通过某些API进行本机调用,然后担心可移植性?我有什么选择?

4 个答案:

答案 0 :(得分:5)

特别查看Apache Commons IOFileUtils.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/

我相信这完全便于携带

戴夫