代码之家  ›  专栏  ›  技术社区  ›  Johannes

如何在Java[关闭]文件系统中“走动”

  •  4
  • Johannes  · 技术社区  · 15 年前

    我想从Java中搜索文件夹/目录,然后进入Java中的文件夹/目录。我想它叫做系统实用程序?有关于这个主题的教程或书籍吗?

    谢谢;

    9 回复  |  直到 11 年前
        1
  •  9
  •   sangupta    15 年前

    我使用此代码获取文件夹中的所有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;
    

    }

        2
  •  5
  •   Gadi    15 年前

    您可以使用apache commons fileutils(请参见: http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html )尤其是listfiles方法,它可以递归地执行此操作并使用过滤器(因此它可以自己保存递归的编写并回答您提到的搜索)。

        3
  •  2
  •   Brian Agnew    15 年前

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

        4
  •  2
  •   vartec    15 年前
        5
  •  1
  •   Adam Rosenfield    15 年前

    我不知道关于这个特定主题的任何教程或书籍,但是要做到这一点的方法是使用 java.io.File 班级。例如,您可以使用 list() 获取目录的内容列表。那只是使用问题 isDirectory() 递归搜索整个文件树。

        6
  •  1
  •   sourcerebels    15 年前

    我用过 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的URL as you can see here .

        7
  •  0
  •   Dmitry Khalatov    15 年前

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

        8
  •  0
  •   dfa    15 年前

    下面是另一个例子:

        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);
        }
    
        9
  •  0
  •   vartec    15 年前