繁体   English   中英

用Java走Linux / Unix文件系统?

[英]Walking a Linux/Unix filesystem with Java?

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

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM