黑马程序员技术交流社区
标题:
使用键盘录入一个文件路径,并统计文件路径中所有文件的...
[打印本页]
作者:
Lws
时间:
2016-9-6 17:10
标题:
使用键盘录入一个文件路径,并统计文件路径中所有文件的...
使用键盘录入一个文件路径,并统计文件路径中所有文件的大小,在输入一个c:或者其他盘的时候,他会报错怎么解?
作者:
LShu
时间:
2016-9-6 17:10
这个问题主要是有隐藏文件的存在,才会出现错误的,楼主可以在读取文件的是判断是否是一个隐藏文件,是的话就跳过就好了,同样也可以使用异常处理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;
}
}
作者:
heh8921
时间:
2016-9-6 18:49
比如文件夹路径是C:\\
File dir = new File("C:\\");
File[] subFiles = dir.listFiles();
在循环数组之前加个判断就行了
if (subFiles != null) {
for (File subFile : subFiles) {
}
}
如果是加密文件夹,不能读取文件夹内容,数组就为null,不会进if语句执行.这样就不报错了.
作者:
seedseed555
时间:
2016-9-6 23:44
来学习了
作者:
seedseed555
时间:
2016-9-6 23:45
来学习了
作者:
flydream
时间:
2016-9-7 00:09
本帖最后由 flydream 于 2016-9-7 00:15 编辑
因为多了一个盘符$RECYCLE.BIN文件夹,据说是回收站文件夹,这个文件夹比较特殊,我对他取了3次子路径,直到报错,一般是隐藏,受保护的
y1.jpg
(16.36 KB, 下载次数: 29)
下载附件
2016-9-7 00:13 上传
右.png
(169.34 KB, 下载次数: 32)
下载附件
2016-9-7 00:13 上传
作者:
zaoan
时间:
2016-9-8 19:53
学习了,挺好
作者:
kangnam
时间:
2016-9-8 21:58
对于windows盘符目录,必须在末尾加上路径分隔符,不然会路径解析出现问题.
作者:
crossover
时间:
2016-9-9 17:37
遍历获取文件的代码;
public static void allFile(File file){
File[] lf = file.listFiles();
if(lf != null){
for (File file2 : lf) {
if(file2.isDirectory()){
allFile(file2);
}else if(file2.getName().startsWith("java")){
System.out.println(file2.getName);
}
}
}
}
作者:
wosika
时间:
2016-9-9 22:15
报错是不是空指针异常?这是很正常的,因为在硬盘根目录下有一个隐藏的不可访问的系统目录,所以会出现异常,如果你对其他的子目录进行遍历就没错了
作者:
芳燚乐乐
时间:
2016-9-9 23:15
import java.io.File; import java.util.Scanner; /* * .从键盘接收一个文件夹路径,统计该文件夹大小。 */ public class Test2 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("输入文件路劲"); String str=sc.nextLine(); File file73=new File(str); File[] abc=file73.listFiles(new Test1_1()); int sum=0; for(File fg:abc){ sum+=fg.length(); } System.out.println(sum); } }接口类import java.io.File; import java.io.FileFilter; /* * 自定义过滤器 */ public class Test1_1 implements FileFilter { @Override public boolean accept(File pathname) { return pathname.getName().endsWith("."); } }你看一下
作者:
huangbinqqian
时间:
2016-9-10 23:56
public class Demo_18复制文件 {
/**
* *Test41--编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt。
*/
public static void main(String[] args) throws Exception{
File file = new File("C:\\Users\\John\\Desktop\\题库");
getFile(file);
}
public static void getFile(File file) throws Exception{
File f1 = new File("C:\\Users\\John\\Desktop\\新建文件夹 (2)",file.getName());
if (!f1.exists()) {
f1.mkdir();
}
File[] file1 = file.listFiles();
for (File file2 : file1) {
if(file2.isFile()) {
File ff = new File(f1,file2.getName());
//File f = new File("C:\\Users\\John\\Desktop\\新建文件夹 (2)",file2.getName());
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(ff));
int b;
while((b = bis.read())!= -1) {
bos.write(b);
}
bis.close();
bos.close();
} else {
getFile(file2);
}
}
}
}
这个代码,基本是可以,但是有一点点瑕疵,刚刚大家交流一下
作者:
changfa
时间:
2016-9-11 08:40
package com.heima.ch; import java.io.File; import java.util.Scanner; public class Tset1 { /** * * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 主要是考递归循环判断 希望对你有用 */ public static void main(String[] args) { File dir = getFile(); System.out.println(printFile(dir)); } public static long printFile(File dir) { File[] files = dir.listFiles(); long len =0 ; for (File file : files) { if(file.isFile()){ len = len + file.length(); }else{ printFile(file); } } return len; } public static File getFile() { Scanner sc = new Scanner(System.in); while(true){ System.out.println("111111"); String line = sc.nextLine(); File file = new File(line); if(!file.exists()){ System.out.println("不cz文件"); }else if(file.isFile()){ System.out.println("是文件"); }else{ return file; } } } }
作者:
13411939415
时间:
2016-9-11 09:41
其实不止隐藏文件的问题,因为用的是递归,分分钟内存溢出
作者:
Coder虫
时间:
2016-9-11 09:45
学习观摩..
作者:
胡小胡小胡
时间:
2016-9-26 11:08
判断隐藏文件的之前没用过,现在来学习下
作者:
某某帅
时间:
2016-9-29 21:58
因为 c盘的文件夹里可能有隐藏文件 它判断不了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2