【问题标题】:isDirectory() method returning 'false' when invoked on java package 'com'在 java 包“com”上调用时,isDirectory() 方法返回“false”
【发布时间】:2013-12-05 19:23:15
【问题描述】:

我做了这个简单的实验来列出父目录中的所有文件/目录。 通过在 Eclipse 中创建一个名为“JavaProject”的 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(目录)

    • .classpath(文件)

    • .project(文件)

    • .settings(目录)

      • org.eclipse.jdt.core.prefs(文件)
    • bin(目录)

      • com(文件)

        • Temp.class(文件)
    • src(目录)

      • com(目录)

        • Temp.java(文件)

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

 .classpath

 .project

 .settings  org.eclipse.jdt.core.prefs

  bin  com

  src  com

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

【问题讨论】:

  • 你从哪个目录运行它?
  • 我首先从 Eclipse 运行它(这将是“JavaProject”导演),后来还尝试从“JavaProject”目录中的 cmd 运行。这两种情况我得到相同的结果。
  • 但是当你从eclipse运行时,它肯定是从“bin”目录运行的吗?所以“../JavaProject”实际上不会存在?这就是为什么您从isDirectory() 返回错误的原因。

标签: java eclipse file-io java-io


【解决方案1】:

当它到达您的代码正在执行的“com”目录时:

File temp = new File("com");

由于您没有指定任何路径,这将被视为相对于当前目录不是包含“com”的目录。

你应该使用类似的东西:

File temp = new File(parent, fn);

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

【讨论】:

  • +1。甚至更好:停止使用字符串,并在任何地方使用 File 的实例(即,将 File 作为参数,并使用 File.listFiles() 而不是 File.list())。
【解决方案2】:

您可以使用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);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 2012-04-04
    • 2023-04-05
    • 2011-06-09
    • 2017-01-28
    • 2013-12-10
    • 2010-10-14
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多