weixin_宝慕林5474660
递归就是自己调用自己的方法。实现像洋葱一样一层层往下,但是实际上只是不停重复剥这个动作,到剥完。
人生之过
调用这个方法本身,所以叫递归啊
慕数据0424730
他这个只是打印文件,而不是目录。
if(file.isDirectory())//这个判断的是是不是目录,如果是就递归。把它下面的文件路径打印出来。 你如果要打印目录其实可以在递归前加上这段代码:System.out.print( file ); 他就会把目录也打印下来。
?
我爱孙佳怡
//空文件夹可以打出来
private void print(File dir){
if(dir==null){
System.out.println(dir + " is null");
}
if(!dir.isDirectory()){
System.out.println(dir + " not is directory");
}
File[] files = dir.listFiles();
if(files.length>0){
for(File file : files){
if(file.isDirectory()){
System.out.println(file.getParent() +"\\"+ file.getName());
print(file);
}else{
System.out.println(file.getParent() +"\\"+ file.getName());
}
}
}
}
慕虎0571853
静态方法可以直接调用
qq_杰先森_0
记住Argument 争论 然后眼熟这个异常
到需要用到时可以用alt+/ 补全 直接选这个
gspsfaf
你传进去的参数是个txt文件不是个目录,即使调用了list方法 ,方法里files这个数组还是null,所以在判断files.length的时候会报异常,应该是这样吧
星宿下钒
if(dir.isDirectory()) {//用于判断file类的对象是否是目录 throw new IllegalArgumentException(dir + "不是目录"); }
判断里面应该是:不是文件夹的话就抛出异常,如果是就遍历文件,应该加!
Passionate1
listDirectory()throws IOException;
则try{
listDirectory()
}
catch(IOException e){
}
艾米丽宏
因为调用自己的时候(listDirector(file2);),listDirector()方法重新执行了一次:num重置为0,sum重新计数,System.out.println("一共:"+num+"个文件!")重新打印一次
艾米丽宏
FileUtils里面的listDirectory是静态方法,不需要实例化可以直接调用
慕先生9431606
System.out.println(A)你把这个加到if语句块里去。else语句是非空文件夹才会输出。仔细想想。
慕侠4079910
我觉得是在try里面调用成功的代码,在catch里面调用失败的代码。
福工刘德华
files是返回的File类型数组,file是数组中的元素
需要先判断数组是否为空(files.length >0),而files != null只是更周全的写法,在这个示例里面其实是可以不用写的,因为上面已经判断了dir的存在
醉清风ds
因为递归之后是有判断某个目录下的长度的,而当递归遍历到空文件夹时,它的长度为0,就不会执行for里面的语句了,就更无法执行for里面的打印语句了。
可以运行一下下面的代码,会每次递归都输出长度,容易理解
File[] filename=dir.listFiles();
//遍历该数组
//for (File string : filename) {
// System.out.println(string);
//}
//2、调用list()方法罗列文件
// String[] filename2=dir.list();
//for (String string : filename2) {
// System.out.println(string);
// }
//3、让它列出所有的内容
System.out.println(filename.length);
if(filename!=null&&filename.length>0) {
for (File file : filename) {
if(file.isDirectory()){
//递归
listDirectory(file);
System.out.println(file);
}else{
System.out.println(file);
}
}
慕移动7208282
直接打印file类型,是在内部tostring了,它本身是一个File对象,第一节讲File的时候说过了。你试试其他对象类型,打印出来的都是对象地址。
慕移动7208282
因为你直接传路径那是一个字符串,new File(路径)这样传的参数才是一个文件 同学 嘻嘻
一只胡思乱想的猪
这个进入死循环了吧,dir参数调用的时候是你自己写的地址,他下次判断的时候不还是这个地址么,没有遍历的元素
浮生未歇2
utf-8
慕粉4402045
就是百分之千万的确定,files数组中是有东西的,避免程序异常。
sunshine_me_1
file的length方法的作用:
如果File表示一个具体文件,则length方法返回这个文件的字节大小;
如果File表示一个目录,则length方法的返回值不确定;
如果File表示的目录或文件不存在,则length方法的返回值为0L。
你要是想获取某个目录下的子文件,是不能用length方法的,要用listFiles方法,用法如下:
File[] files = file.listFiles();
listFiles方法返回一个File数组,就是拿到的所有子文件(或目录)。
望采纳。
sunshine_me_1
按照java的doc文档,
如果File表示一个具体文件,则length方法返回这个文件的字节大小;
如果File表示一个目录,则length方法的返回值不确定;
如果File表示的目录或文件不存在,则length方法的返回值为0L。
望采纳。
qq_甲乙丙的丁_0
是File类中自带的
dakela
package com.xingzhuang;
import java.util.Scanner;
public class test1{
public static void main(String[]args){
char weekSecond;
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个字母");
String letter=input.next();
if(letter.length()==1){
char weekFirst=letter.charAt(0);
switch(weekFirst){
case'm':
case'M':
System.out.println("星期一");
break;
case't':
case'T':
System.out.println("由于星期二和星期四都是T开头,请继续输入第二个字母");
letter=input.next();
if(letter.length()==1){
weekSecond=letter.charAt(0);
if(weekSecond=='U'||weekSecond=='u'){
System.out.println("星期二");
break;
}else if(weekSecond=='H'||weekSecond=='h'){
System.out.println("星期四");
break;
}else{ //这里的else有错,不懂
System.out.println("输入第二个错误,请重新输入");
break;
}
} else{ //这里的else有错,不懂
System.out.println("输入超过一个字母,请重新输入");
break;
}
case'w':
case'W':
System.out.println("星期三");
break;
case'f':
case'F':
System.out.println("星期五");
break;
case's':
case'S':
System.out.println("星期六和星期天都是s开头,需要输入第二个字母");
letter=input.next();
if(letter.length()==1){
weekSecond=letter.charAt(0);
if(weekSecond=='A'||weekSecond=='a'){
System.out.println("星期六");
break;
}
else if(weekSecond=='U'||weekSecond=='u'){
System.out.println("星期天");
break;
}else{
System.out.println("输入错误,请重新输入");
}
}else{ //这里的else有错,不懂
System.out.println("输入超过一个字母,请重新输入");
break;
}
default:
System.out.println("默认输出,无法识别,请重新输入");
break;
}
}else{
System.out.println("最后输入错误,只能输入一个字母,请重新输入");
}
}
}
慕函数8108156
贴代码
qq_浮雲遊子_03977413
参数类型是File,直接写说白了就是个字符串,你拿String类型的东西如何能当做到File类型的参数传呢?
不想她是借口
不是实现重新判断if语句的作用!视频中已经提到了那是递归。什么是递归呢?简单一点说就是自身调用自身的一种形式。在listDirectory(File dir)方法中已经有了查看当前目录下的内容,当想要查看其子目录下的内容时所用到的方法(手段)与listDirectory(File dir)方法中查看当前目录下的内容的方法(手段)一致,那么就没必要在写一个方法,所用就直接调用listDirectory(File dir)。
慕粉3677886
第一个是抛出异常,当前方法内不处理。第二个是捕获异常,即处理异常
for__what
空文件只能遍历文件名
qq_青羽天穹_0
反斜杠/是可以运行的。但是你怎么把冒号写成分号了!