40

我希望能够列出当前目录中的文件。我做了一些应该可以工作但没有返回所有文件名的东西。

File dir = new File(".");
File[] filesList = dir.listFiles();
for (File file : filesList) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

它返回.classpath,但我很确定我在这个文件夹中有其他 java 文件。也许当前文件夹的点符号不正确?

4

7 回答 7

35

试试这个,检索文件夹和子文件夹中的所有文件

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                getAllFiles(f);
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }

仅检索文件/文件夹

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                System.out.println(f.getName());
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }
于 2013-03-18T16:59:07.363 回答
12

也许当前文件夹的点符号不正确?

打印结果File.getCanonicalFile()以检查路径。

谁能向我解释为什么 src 不是当前文件夹?

调用 JVM 时,您的 IDE 正在设置类路径。

EG(到达 Netbeans) 如果您选择菜单File| Project Properties (all classes)您可能会看到类似以下内容:

Netbeans 项目选项

这是Working Directory这里感兴趣的。

于 2013-03-18T18:05:01.800 回答
3

您应该验证它new File(".")确实指向您认为它指向的位置 -.classpath暗示了一些 Eclipse 项目的根......

于 2013-03-18T16:58:51.540 回答
3

对此进行了快速窥探,但这看起来应该可行。虽然我还没有测试过。

    File f = new File("."); // current directory

    File[] files = f.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.print("directory:");
        } else {
            System.out.print("     file:");
        }
        System.out.println(file.getCanonicalPath());
    }
于 2013-03-18T17:00:46.347 回答
1

您的代码没有任何问题。它应该列出指定目录直接包含的所有文件和目录。

问题很可能是以下之一:

  • "."目录不是您所期望的。"."路径名实际上表示 JVM 的“当前目录”或“工作目录” 。"."您可以通过打印来验证实际是什么目录dir.getCanonicalPath()

  • 您误解了dir.listFiles()返回的内容。它不会返回下面树中的所有对象dir。它只返回直接dir.

".classpath"文件表明您正在查看 Eclipse 项目目录,并且 Eclipse 项目通常配置有子目录中的 Java 文件,例如"./src". 我不希望在"."目录中看到任何 Java 源代码。


谁能向我解释为什么 src 不是当前文件夹?”

假设您在 Eclipse 中启动应用程序,则当前文件夹默认为项目目录。您可以通过启动器配置向导中的面板之一更改默认当前目录。

于 2013-03-18T17:13:10.650 回答
0

如果您独立编译和运行代码(从命令行),您的代码会给出预期的结果。在eclipse中,每个项目的默认工作目录是项目目录,这就是你得到这个结果的原因。

您可以在 java 中将 user.dir 属性设置为:

   System.setProperty("user.dir", "absolute path of src folder");

那么它将给出预期的结果。

于 2013-03-18T17:21:31.280 回答
0

我在我的本地目录中使用了这个答案(例如E://)它对于第一个目录和第二个目录工作正常,在搜索我发现问题是由隐藏目录创建的原因之后,输出产生了一个 java 空指针异常,并且这个目录是由windows创建的,以避免这个问题,只需使用这个

public void recursiveSearch(File file ) {
 File[] filesList = file.listFiles();
    for (File f : filesList) {
        if (f.isDirectory() && !f.isHidden()) {
            System.out.println("Directoy name is  -------------->" + f.getName());
            recursiveSearch(f);
        }
        if( f.isFile() ){
            System.out.println("File name is  -------------->" + f.getName());
        }
    }
}
于 2016-05-11T14:00:35.817 回答