for(File f:fs){ if(f.isDirectory()){ kg(len); System.out.println(f.getName()); printf(f,len+1);//在这里面应该是f,而不是file,因为遍历的是f }else{ kg(len); System.out.println(f.getName()); } }
public static void kg(int length){ for(int i=0;i<length;i++){ System.out.print(" ");//这里不需要println,不用换行,直接输出空格就是了 } }
问题:主要是细节问题和仔细程度不够
java.io.File类
1、凡是与输入输出相关的类,接口等都定义在java.io包下
2、File是一个类,可以有构造器创建其对象。此对象对应着一个文件(.txt.avi,ppt等)或文件目录
3、File类对象与平台无关的
路径:绝对路径:包括盘符在内的完整的文件路径
相对路径:在当前文件目录下的文件的路径
getName()获取文件名
getPath()获取文件路径
getAbsoluteFile()获取绝对文件
getAbsolutePath()获取绝对路径
getParent()获取上一级文件
renameTo(File newName)重命名eg:file1.renameTo(file2):file1重命名为file2 要求:file1必须存在,file2不一定存在
exists()文件是否存在
canWrite()是否可写
canRead()是否可读
isFile()是否是文件
isDirectory()判断是不是一个目录
lastModified()最后一次操作的时间
length()长度
mkDir()创建目录
mkDirs()创建上一及和本级目录
list()列出文件中的内容,字符串
File[] listFiles()获取这个路径下的文件和文件夹
createNewFile()创建一个新的文件
delete()
删除
I/O流
1、按照处理数据的单位不同分为:字节流(以stream结尾)字符流(以reader和writer
2、流的分类
按照数据流的方向
输入流(Input), 输出流(Output)
输入流: 从文件往程序走数据
输出流: 从程序往文件走数据
按照处理数据的单位不同:
八大数据类型所占字节数:
byte(1), short(2), int(4), long(8)
float(4), double(8)
boolean(1)
char(2)
字节流(以stream结尾的), 字符流(以Reader, Writer结尾的)
字节流: 一个字节占8位, 以一个字节为单位读数据
字符流: 一个字符占两个字节, 以一个字符为一个单位
按照功能分:
节点流, 处理流
节点流: 只有一个根管道套在文件上进行传输
处理流: 将节点流处理一下, 增强管道的功能, 相当于在管道上套一层
package shipin; import java.io.File; public class TextFile { public static void main(String[] args) { File file =new File("E:\学习"); printf(file, 0); } public static void printf(File file,int len){ if(file.exists()){ File[] fs=file.listFiles(); for(File f:fs){ if(f.isDirectory()){ kg(len); System.out.println(f.getName()); printf(f,len+1); }else{ kg(len); System.out.println(f.getName()); } } }else{ System.out.println("文件不存在"); } } public static void kg(int length){ for(int i=0;i<length;i++){ System.out.print(" "); } } }