这个问题主要是有隐藏文件的存在,才会出现错误的,楼主可以在读取文件的是判断是否是一个隐藏文件,是的话就跳过就好了,同样也可以使用异常处理try{}catch() {}方法来解决,希望可以帮到你.
/*
* 使用键盘录入一个文件路径,并统计文件路径中所有文件的大小
*
* 分析:
* 1,创建一个键盘录入对象
* 2,使用while无限循环
* 3,将键盘录入的文件路径存放到一个File文件中
* 4,判断录入的文件是否是一个文件夹路径
* 是:返回这个文件夹路径
* 否:判断这个路径是否存在,如果存在就判断是否是一个文件路径,都给予提示
* 5,定义一个获取所有文件长度的方法
* 6,定义一个长度变量
* 7,将获取到的文件和文件夹存放到一个File[]数组中
* 8,遍历数组,判断这个File[]数组中存放的是否是文件
* 是:将其长度统计
* 否:进行递归调用,获取文件夹中文件
* 9,返回所有文件的长度
*/
package com.heima.practise;
import java.io.File;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
File dir = getDir();
long length = getFileLongth(dir);
System.out.println(length);
}
//定义一个获取文件夹路径的方法
public static File getDir() {
//1,创建一个键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
//2,使用while无限循环
while(true){
//3,将键盘录入的文件路径存放到一个File文件中
String line = sc.nextLine();
File dir = new File(line);
/*
* 4,判断录入的文件是否是一个文件夹路径
* 是:返回这个文件夹路径
* 否:判断这个路径是否存在,如果存在就判断是否是一个文件路径,都给予提示
*/
if (!dir.exists()) {
System.out.println("您输入的是一个文件夹路劲,请输入一个文件夹路径:");
}else if (dir.isFile()) {
System.out.println("您输入的是一个文件路径,请重新输入一个文件夹路径:");
}else {
return dir;
}
}
}
//5,定义一个获取所有文件长度的方法
public static long getFileLongth(File dir) {
//6,定义一个长度变量
long len = 0;
// 7,将获取到的文件和文件夹存放到一个File[]数组中
File[] arr = dir.listFiles();
/*
* 8,遍历数组,判断这个File[]数组中存放的是否是文件
* 是:将其长度统计
* 否:进行递归调用,获取文件夹中文件
*/
for (File file : arr) {
if (file.isFile()) {
len = len + file.length();
}else {
//判断是否是一个隐藏的文件或者是一个隐藏的文件夹
if (file.isHidden()) {
System.out.println(file.getName() + "是一个隐藏的文件或者文件夹");
//停止本次的for循环,继续下一次的for循环
continue;
}
len = len + getFileLongth(file);
}
}
//9,返回所有文件的长度
return len;
}
}
|