isDirectory()方法在java包'com'上调用时返回'false'

时间:2013-11-21 10:57:22

标签: java eclipse file-io java-io

我做了这个简单的实验,列出了父目录中的所有文件/目录。 这是通过在名为'JavaProject'的eclipse中创建一个java项目,在src / com下创建一个类'Temp.java'来实现的。代码如下:

 public class Temp {
public static void main(String[] args) {

    search("../JavaProject");
}

public static void search(String dName) {
    String[] files = new String[100];
    File search = new File(dName); // make file object
    if (!search.isDirectory()) {
        return;
    }
    files = search.list(); // create the list
    for (String fn : files) {// iterate through it
        System.out.print("  " + fn);
        File temp = new File(fn);
        if (temp.isDirectory()) {
            search(fn);
        }
        System.out.println();
        }
    }
} 

文件结构如下:

  • JavaProject(DIR)

    • 的.classpath(文件)

    • 的.project(文件)

    • .settings(dir)

      • org.eclipse.jdt.core.prefs(文件)
    • 箱(DIR)

      • COM(文件)

        • Temp.class(文件)
    • SRC(DIR)

      • com(dir)

        • Temp.java(文件)

当我运行上述程序时,它会给出以下输出:

 .classpath

 .project

 .settings  org.eclipse.jdt.core.prefs

  bin  com

  src  com

我无法理解为什么它不会在com文件夹中打印.java文件和.class文件。 当我尝试调试时,'com'上的文件对象为isDirectory()和isFile()方法返回'false'。

2 个答案:

答案 0 :(得分:3)

当它到达你的代码正在执行的'com'目录时:

File temp = new File("com");

由于您尚未指定任何路径,因此将相对于当前目录包含“com”的目录。

你应该使用类似的东西:

File temp = new File(parent, fn);

其中parent是父目录的File对象。

答案 1 :(得分:1)

您可以使用listFiles()代替list()。见下面的例子:

public class Program {

    public static void main(String args[]) throws IOException {
        search(new File("."), 0);
    }

    public static void search(File file, int level) {
        if (!file.isDirectory()) {
            return;
        }

        for (File f : file.listFiles()) {
            for (int i = 0; i < level; i++) {
                System.out.print("    ");
            }
            System.out.println(f.getName());
            if (f.isDirectory()) {
                search(f, ++level);
            }
        }
    }
}