建了一个Node类,内有属性Node parent,String name 设置了get set方法。C盘下有a文件夹,内有b,c子文件夹,b内有b1.txt,b2.txt.c内有c1.txt,c2.txt.在main方法中调用如下:
public static void main(String[] args) {
File file = new File("C:\\a");
printTree(file,null);
} public static void printTree(File file,Node parent) { if (file == null || !file.exists()) {
return;
}
if(parent!=null){
System.out.println(file.getName()+" "+parent.getName());
}
boolean isLeaf = file.isFile(); Node node = new Node();
node.setName(file.getName()); //句3
node.setParent(parent);
node.setLeaf(isLeaf);
if(node.getParent()!=null){
System.out.println(node.getParent().getName());
}
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
}
}
}
输出结果如下:
b a
a
b1.txt b
b //句4
b2.txt b //句1
b //句2
c a //句6
a
c1.txt c
c
c2.txt c
c
不太明白句1和句2的输出。到句4输出后,此时的句5,Node的name已经被设置成b1.txt,再次循环输出b2的时候,此时通过printTree(subs[i], node)方法传去出的参数node已经是b1.txt,为什么句6输出的parent.getName())是a呢?希望有人能帮助一下!!
public static void main(String[] args) {
File file = new File("C:\\a");
printTree(file,null);
} public static void printTree(File file,Node parent) { if (file == null || !file.exists()) {
return;
}
if(parent!=null){
System.out.println(file.getName()+" "+parent.getName());
}
boolean isLeaf = file.isFile(); Node node = new Node();
node.setName(file.getName()); //句3
node.setParent(parent);
node.setLeaf(isLeaf);
if(node.getParent()!=null){
System.out.println(node.getParent().getName());
}
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
}
}
}
输出结果如下:
b a
a
b1.txt b
b //句4
b2.txt b //句1
b //句2
c a //句6
a
c1.txt c
c
c2.txt c
c
不太明白句1和句2的输出。到句4输出后,此时的句5,Node的name已经被设置成b1.txt,再次循环输出b2的时候,此时通过printTree(subs[i], node)方法传去出的参数node已经是b1.txt,为什么句6输出的parent.getName())是a呢?希望有人能帮助一下!!
push b a 执行 printTree(b1.txt,b)
pop b a printTree(b1.txt,b)完成
push b a 执行 printTree(b2.txt,b)
pop b a printTree(b2.txt,b)完成
pop a null printTree(a,b)完成
push a null 执行 printTree(c,a)
push c a 执行 printTree(c1.txt,c)
pop c a printTree(c1.txt,c)完成
push c a 执行 printTree(c2.txt,c)
pop c a printTree(c2.txt,c)完成
pop a null
从文件夹a开始查找他的子文件,如果他的子文件也是个文件夹的话就递归。
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
就是来判断他的子文件是否是文件夹的。如果subs!=null,那么就是说该文件是子文件夹,
那么干嘛呢?从.listFiles()得出的子文件数组依次找他的子文件啊。那当然是
b1.txt b
b //句4
b2.txt b //句1
b //句2
这样输出的啊。如果假设b的文件夹下有:b1.txt,b2,txt,d(文件夹)这3个文件,而d:d1.txt
那么部分输出是:
b1.txt b
b
b2.txt b
b
d b
b
d1.txt d
d
自己慢慢理解吧,不要急,一步步的来,总会弄懂的。
从文件夹a开始查找他的子文件,如果他的子文件也是个文件夹的话就递归。
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
就是来判断他的子文件是否是文件夹的。如果subs!=null,那么就是说该文件是子文件夹,
那么干嘛呢?从.listFiles()得出的子文件数组依次找他的子文件啊。那当然是
b1.txt b
b //句4
b2.txt b //句1
b //句2
这样输出的啊。如果假设b的文件夹下有:b1.txt,b2,txt,d(文件夹)这3个文件,而d:d1.txt
那么部分输出是:
b1.txt b
b
b2.txt b
b
d b
b
d1.txt d
d
自己慢慢理解吧,不要急,一步步的来,总会弄懂的。
从文件夹a开始查找他的子文件,如果他的子文件也是个文件夹的话就递归。
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
就是来判断他的子文件是否是文件夹的。如果subs!=null,那么就是说该文件是子文件夹,
那么干嘛呢?从.listFiles()得出的子文件数组依次找他的子文件啊。那当然是
b1.txt b
b //句4
b2.txt b //句1
b //句2
这样输出的啊。如果假设b的文件夹下有:b1.txt,b2,txt,d(文件夹)这3个文件,而d:d1.txt
那么部分输出是:
b1.txt b
b
b2.txt b
b
d b
b
d1.txt d
d
自己慢慢理解吧,不要急,一步步的来,总会弄懂的
push b a 执行 printTree(b1.txt,b)
pop b a printTree(b1.txt,b)完成
push b a 执行 printTree(b2.txt,b)
pop b a printTree(b2.txt,b)完成
pop a null printTree(a,b)完成
push a null 执行 printTree(c,a)
push c a 执行 printTree(c1.txt,c)
pop c a printTree(c1.txt,c)完成
push c a 执行 printTree(c2.txt,c)
pop c a printTree(c2.txt,c)完成
pop a null
import java.io.File;public class fileview { /**
* @param args
*/
public static void displayFile(String path){
File file=new File(path);
if(file.isFile()){
System.out.println(file.getName());
}else{
System.out.println("<DIR>"+file.getName());
String[] fileList=file.list();
String pathname=file.getAbsolutePath();//得到文件的抽象路径名的绝对路径名字符串
for(int i=0;i<fileList.length;i++){
//递归调用
displayFile(pathname+File.separator+fileList[i]);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
fileview.displayFile("D:/编程软件课程");
}}我也变过类似的代码。楼主的问题应该是
File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
printTree(subs[i], node);
}
}
换到最上面看看,比较一下。