如何显示目录的内容

时间:2010-09-17 15:46:44

标签: java

我需要编写一个递归算法来显示计算机文件系统中目录的内容,但我对Java很新。有没有人有关于如何使用Java访问文件系统中的目录的任何代码或良好的教程?

5 个答案:

答案 0 :(得分:1)

您可以使用JFileChooser课程,请查看example

您也可以使用java执行本地命令,例如DIRls,这里是example

答案 1 :(得分:1)

这花了我太长时间来编写和测试,但这里应该有用。

注意:您可以传入字符串或文件。

注2:这是一个天真的实现。它不仅是单线程的,而且它不会检查文件是否是链接,并且由于这个原因而可能陷入无限循环。

注3:评论后的行可以用你自己的实现替换。

import java.io.*;

public class DirectoryRecurser {

    public static void parseFile(String filePath) throws FileNotFoundException {
        File file = new File(filePath);
        if (file.exists()) {
            parseFile(file);
        } else {
            throw new FileNotFoundException(file.getPath());
        }
    }

    public static void parseFile(File file) throws FileNotFoundException {
        if (file.isDirectory()) {
            for(File child : file.listFiles()) {
                parseFile(child);
            }
        } else if (file.exists()) {
            // Process file here
            System.out.println(file.getPath());
        } else {
            throw new FileNotFoundException(file.getPath()); 
        }
    }
}

然后可以这样调用(使用Windows路径,因为此Workstation使用的是Windows):

public static void main(String[] args) {
    try {
        DirectoryRecurser.parseFile("D:\\raisin");
    } catch (FileNotFoundException e) {
        // Error handling here
        System.out.println("File not found: " + e.getMessage());
    }
}

就我而言,打印出来:

  

找不到档案:D:\ raisin

因为所说的目录只是我编写的目录。否则,它会打印出每个文件的路径。

答案 2 :(得分:1)

查看Apache Commons VFS:http://commons.apache.org/vfs/

样品:

// Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );

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

如果您需要访问网络驱动器上的文件,请查看JCIFS:http://jcifs.samba.org/

答案 3 :(得分:0)

对于每个文件,您需要检查它是否是目录。如果是,你需要递归。这是一些未经测试的代码,应该有所帮助:

public void listFiles(File f){
    System.out.println(f.getAbsolutePath());
    if(f.isDirectory()){
        for (File i : f.listFiles()){
            listFiles(i);
        }
    }
}

答案 4 :(得分:0)

检查这个好友

http://java2s.com/Code/Java/File-Input-Output/Traversingallfilesanddirectoriesunderdir.htm

public class Main {
  public static void main(String[] argv) throws Exception {
  }


  public static void visitAllDirsAndFiles(File dir) {
    System.out.println(dir);

    if (dir.isDirectory()) {
      String[] children = dir.list();
      for (int i = 0; i < children.length; i++) {
        visitAllDirsAndFiles(new File(dir, children[i]));
      }
    }
  }

}