我的目标是获取文件夹中文件的名称,如果该文件夹中有另一个文件夹,那么它还应该为我提供THAT文件夹中文件的名称。等等。
这是代码:
public class GettingDir {
public static void main(String[] args){
File dir = new File("Numbers/");
File[] files = dir.listFiles();
for(File f : files){
if(f.isDirectory()){
System.out.println(f.getName());
getDirectory(f.toString());
}else{
System.out.println(f.getName());
}
}
}
这是getDirectory()方法:
public static void getDirectory(String dir){
File place = new File(dir);
if(place.isDirectory()){
File[] files = place.listFiles();
for(File f : files){
if(f.isDirectory()){
System.out.println(f.getName());
getDirectory(dir);
}else{
System.out.println(f.getName());
}
}
}
}
现在。我不完全理解错误,它是一个无限循环,然后是无限错误。一些聪明的头脑可以告诉我什么是错的吗?
P.S。对不起,如果代码很可怜,我是初学者:D
答案 0 :(得分:0)
在递归函数中,您应该调用getDirectory(f);
而不是getDirectory(dir);
在您的实施中,您实际上是在第一级重新开始。堆栈会溢出。
答案 1 :(得分:0)
您将目录的名称传递给getDirectory()方法,此方法只使用new File(dir)
来获取文件。因此它不会从其父目录开始,而是始终从用户目录开始。使用File对象表示文件:
主要方法:
getDirectory(f);
在getDirectory方法中:
public static void getDirectory(File place){
File[] files = place.listFiles();
for(File f : files){
if(f.isDirectory()){
System.out.println(f.getName());
getDirectory(f);
} else {
System.out.println(f.getName());
}
}
}
请注意,主要方法可以重新编译为
public static void main(String[] args){
File dir = new File("Numbers/");
getDirectory(dir);
}
答案 2 :(得分:0)
我远不是一个聪明的头脑,但你应该改变
getDirectory(dir);
到
getDirectory(f.toString());
您的getDirectory
方法中的
public static void getDirectory(String dir) {
File place = new File(dir);
if (place.isDirectory()) {
File[] files = place.listFiles();
for (File f : files) {
if (f.isDirectory()) {
System.out.println(f.getName());
getDirectory(f.toString());
} else {
System.out.println(f.getName());
}
}
}
}
无论如何,只需提示,您就可以进一步简化代码:
public static void main(String[] args) {
getDirectory("Numbers/");
}
public static void getDirectory(String dir) {
File place = new File(dir);
System.out.println(dir);
if (place.isDirectory()){
File[] files = place.listFiles();
for (File f : files) getDirectory(f.toString());
}
}
答案 3 :(得分:0)
你犯了一个小错误:getDirectory(dir)
应该被getDirectory(f.toString())
取代。最重要的是,您可以简化主要方法。
public static void getDirectory(String dir){
File place = new File(dir);
if(place.isDirectory()){
File[] files = place.listFiles();
for(File f : files){
if(f.isDirectory()){
System.out.println(f.getName());
getDirectory(f.toString());
} else{
System.out.println(f.getName());
}
}
}
}
public static void main(String[] args) {
getDirectory("Numbers/");
}