如何使用Java在文件系统中“四处走动”

时间:2009-04-16 10:56:59

标签: java linux filesystems

我想从java搜索文件夹/目录,然后进入java中的那些文件夹/目录。我想这叫做系统工具?那里有任何教程,或关于这个主题的书籍?

谢谢;)

9 个答案:

答案 0 :(得分:9)

我使用此代码获取文件夹中的所有ZIP文件。以递归方式调用此方法,一次又一次地检查文件对象是否为子目录。

public List<String> getFiles(String folder) {

List<String> list = new ArrayList<String>();
        File dir = new File(folder);
        if(dir.isDirectory()) {
            FileFilter filter = new FileFilter() {

                public boolean accept(File file) {
                    boolean flag = false;
                    if(file.isFile() && !file.isDirectory()) {
                        String filename = file.getName();
                        if(!filename.endsWith(".zip")) {
                            return true;
                        }
                        return false;   
                }

            };
            File[] fileNames = dir.listFiles(filter);
            for (File file : fileNames) {
                list.add(file.getName());
            }
            return list;

}

答案 1 :(得分:5)

你可以使用Apache Commons FileUtils(参见:http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html),特别是那里的listFiles方法,它可以递归地执行此操作并使用过滤器(因此它可以节省您自己的递归写入并回答您提到的搜索)。

答案 2 :(得分:2)

如果要导航文件系统,请查看File和list()方法。您很可能需要一些递归方法来向下浏览层次结构。

答案 3 :(得分:2)

答案 4 :(得分:1)

我不知道有关该特定主题的任何教程或书籍,但是这样做的方法是使用java.io.File类。例如,您可以使用list()获取目录内容的列表。然后,只需使用isDirectory()并递归搜索整个文件树。

答案 5 :(得分:1)

我使用了Apache Commons VFS

很高兴将它用于目录的读取内容,如下所示:

FileSystemManager fsManager = VFS.getManager();
FileObject path = fsManager.resolveFile( "file:///tmp" );

FileObject[] children = path.getChildren();
System.out.println( "Children of " + path.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
    System.out.println( children[ i ].getName().getBaseName() );
}

您可以使用getType()检查子项是文件,文件夹还是其他内容。

相同的代码适用于读取ZIP或JAR文件,FTP,SFTP,...只需更改resolveFile as you can see here的URL。

答案 6 :(得分:0)

您可以使用java.io.File类进行搜索。

答案 7 :(得分:0)

这是另一个例子:

    for (File file : File.listRoots()[0].listFiles()) {
        System.out.println(file);
    }

同样,只打印目录:

    FileFilter isDirectory = new FileFilter() {

        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    };

    for (File file : File.listRoots()[0].listFiles(isDirectory)) {
        System.out.println(file);
    }

答案 8 :(得分:0)

很好的例子: http://www.leepoint.net/notes-java/io/10file/20recursivelist.html

顺便说一句。我建议阅读整篇文章。 http://www.leepoint.net/notes-java/