我做了这个简单的实验,列出了父目录中的所有文件/目录。 这是通过在名为'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)
箱(DIR)
COM(文件)
SRC(DIR)
com(dir)
当我运行上述程序时,它会给出以下输出:
.classpath
.project
.settings org.eclipse.jdt.core.prefs
bin com
src com
我无法理解为什么它不会在com文件夹中打印.java文件和.class文件。 当我尝试调试时,'com'上的文件对象为isDirectory()和isFile()方法返回'false'。
答案 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);
}
}
}
}