Java File类的问题
importjava.io.*;publicclassTestFileList{publicstaticvoidmain(Stringargs[]){Filef=newF...
import java.io.*;
public class TestFileList {
public static void main (String args[]) {
File f= new File ("e:/Java Program/A");//创建出一个新的文件夹?
System.out.println (f.getName ());//getName()的作用是返回抽象路径父目录的路径名字符串,如果此路径名没有此指定的父目录,则返回null
tree (f,1); //方法调用,这里的level为1是因为之前输出了 A,所以传入1以缩进4个空格
// private static void tree (File f, int level){
// }
}
private static void tree(File f, int level) {
String preStr ="";//这个字符串的作用是控制缩进的空格数
for (int i=0;i<level;i++){
preStr+=" ";
}
File[] children= f.listFiles();//public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。如果此抽象路径名不表示一个目录,那么此方法将返回 null。
for (int i=0;i<children.length;i++){
System.out.println (preStr+children[i].getName());
if (children[i].isDirectory())//public boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
tree(children[i],level+1);
}
}
}
/*
* System.out.println (preStr+children[i].getName()); 这是一个容易理解有问题的地方,比如紧跟A下的文件里面有B和file1
* 那么执行了这句话后B和file1.txt都将被输出,并且是换行输出的(为什么?)
* children[i].isDirectory();这个语句的作用是判断当前这个文件下还有没有子文件,如果有的话则继续调用tree(...)这个方法
*/
A
B
C
D
E
F
file3.txt
file2.txt
file1.txt
我想问的是1.这里File f= new File ("e:/Java Program/A");是不是调用了构造方法,和creatNewFile()有什么区别?2.为什么我写的private static void tree (File f, int level){ }不行,编译器帮我创建的这个方法和我写的好像没有什么不同啊。3.tree(children[i],level+1);这条语句里面level+1并没有改变level的值,为什么也能控制空格数啊?4.我的一些注解是不是正确的? 展开
public class TestFileList {
public static void main (String args[]) {
File f= new File ("e:/Java Program/A");//创建出一个新的文件夹?
System.out.println (f.getName ());//getName()的作用是返回抽象路径父目录的路径名字符串,如果此路径名没有此指定的父目录,则返回null
tree (f,1); //方法调用,这里的level为1是因为之前输出了 A,所以传入1以缩进4个空格
// private static void tree (File f, int level){
// }
}
private static void tree(File f, int level) {
String preStr ="";//这个字符串的作用是控制缩进的空格数
for (int i=0;i<level;i++){
preStr+=" ";
}
File[] children= f.listFiles();//public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。如果此抽象路径名不表示一个目录,那么此方法将返回 null。
for (int i=0;i<children.length;i++){
System.out.println (preStr+children[i].getName());
if (children[i].isDirectory())//public boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
tree(children[i],level+1);
}
}
}
/*
* System.out.println (preStr+children[i].getName()); 这是一个容易理解有问题的地方,比如紧跟A下的文件里面有B和file1
* 那么执行了这句话后B和file1.txt都将被输出,并且是换行输出的(为什么?)
* children[i].isDirectory();这个语句的作用是判断当前这个文件下还有没有子文件,如果有的话则继续调用tree(...)这个方法
*/
A
B
C
D
E
F
file3.txt
file2.txt
file1.txt
我想问的是1.这里File f= new File ("e:/Java Program/A");是不是调用了构造方法,和creatNewFile()有什么区别?2.为什么我写的private static void tree (File f, int level){ }不行,编译器帮我创建的这个方法和我写的好像没有什么不同啊。3.tree(children[i],level+1);这条语句里面level+1并没有改变level的值,为什么也能控制空格数啊?4.我的一些注解是不是正确的? 展开
1个回答
展开全部
File f = new File("e:/Java Program/A"); 实例化File对象,调用了构造方法,但只是设置了路径和初始化一些参数而已。
creatNewFile()则是物理硬盘上新建一个文件。另外mkdir()和mkdirs()是创建文件夹。
问题2表述不是很清楚。
tree(children[i],level+1);是递归调用,传入的level参数比父目录的level多1,也就是增加了一级缩进。
getName()是获取文件名,getParent()才是父目录的路径字符串。
System.out.println (preStr+children[i].getName()); 这句在for循环里面,遍历子文件数组,当然B和file1.txt都会被输出,println会打印换行的。
children[i].isDirectory();isDirectory()是判断File对象是否是文件夹,不是判断是否有子文件。当然是文件夹是存在子文件的充分条件。即时是空文件夹,进一步递归tree方法时得到的子文件数组也是空的,不会抛出异常。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询