File的递归练习
打印一个文件夹下所有文件的大小
public static File getDir() {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个文件夹路径");
while(true) {
String line = in.nextLine();
File dir = new File(line);
if(!dir.exists()) {
System.out.println("你录入的文件夹路径不存在");
}else if(dir.isFile()) {
System.out.println("别输入文件啊");
}else {
return dir;
}
}
}
getDir方法,用来从键盘获取一个文件夹的路径。
public static long getFileLength(File dir) {
long len = 0;
File[] subFiles = dir.listFiles();
for (File subFile : subFiles) {
if(subFile.isFile()) {
len = len+subFile.length();
}else {
len = len + getFileLength(subFile);
}
}
return len;
}
因为要返回字节大小,所以定义返回值为LONG,传入参数为File对象 dir。
初始len值为0
讲所有文件存入数组,递归数组,如果是文件则算出大小,叠加len的值
如果是文件夹,则调用递归。
删除一个文件夹下的所有文件
public static void DeleteFile(File dir) {
File[] subFiles = dir.listFiles();
for (File subFile : subFiles) {
if(subFile.isFile()) {
subFile.delete();
}else {
DeleteFile(subFile);
}
}
dir.delete();
}
如果是文件,delete。如果是文件夹,调用自身。
需要注意的是 没有返回值。
拷贝文件
public static void copy(File src,File dest) throws IOException {
File newDir = new File(dest,src.getName());
newDir.mkdir();
File[] subFiles = src.listFiles();
for (File subFile : subFiles) {
if(subFile.isFile()) {
BufferedInputStream bis =
new BufferedInputStream(new FileInputStream(subFile));
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
//需要调用Buffered方法,
//File(文件对象,新文件名);
int b;
while((b = bis.read())!= -1) {
bos.write(b);
}
bis.close();
bos.close();
}
else {
copy(subFile,newDir);
}
}
}
分级当前文件下的目录
public static void printLev(File dir, int lev) {
File[] subFiles = dir.listFiles();
for (File subFile : subFiles) {
for(int i=0;i<=lev;i++) {
System.out.print("\t");
}
System.out.println(subFile);
if(subFile.isDirectory()) {
printLev(subFile,lev + 1);
}
}
}
传入的参数多了一个lev
lev值多1 ,多打印一个\t,用来换行。