how2j.cn


工具版本兼容问题
文件和文件夹都是用File代表


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



14分55秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : 创建一个文件对象   
步骤 2 : 文件常用方法1   
步骤 3 : 文件常用方法2   
步骤 4 : 练习-遍历文件夹   
步骤 5 : 答案-遍历文件夹   
步骤 6 : 练习-遍历子文件夹   
步骤 7 : 答案-遍历子文件夹   

步骤 1 :

创建一个文件对象

edit
使用绝对路径或者相对路径创建File对象
创建一个文件对象
package file; import java.io.File; public class TestFile { public static void main(String[] args) { // 绝对路径 File f1 = new File("d:/LOLFolder"); System.out.println("f1的绝对路径:" + f1.getAbsolutePath()); // 相对路径,相对于工作目录,如果在eclipse中,就是项目目录 File f2 = new File("LOL.exe"); System.out.println("f2的绝对路径:" + f2.getAbsolutePath()); // 把f1作为父目录创建文件对象 File f3 = new File(f1, "LOL.exe"); System.out.println("f3的绝对路径:" + f3.getAbsolutePath()); } }
package file;
 
import java.io.File;
 
public class TestFile {
 
    public static void main(String[] args) {
        // 绝对路径
        File f1 = new File("d:/LOLFolder");
        System.out.println("f1的绝对路径:" + f1.getAbsolutePath());
        // 相对路径,相对于工作目录,如果在eclipse中,就是项目目录
        File f2 = new File("LOL.exe");
        System.out.println("f2的绝对路径:" + f2.getAbsolutePath());
 
        // 把f1作为父目录创建文件对象
        File f3 = new File(f1, "LOL.exe");
 
        System.out.println("f3的绝对路径:" + f3.getAbsolutePath());
    }
}
步骤 2 :

文件常用方法1

edit
注意1: 需要在D:\LOLFolder确实存在一个LOL.exe,才可以看到对应的文件长度、修改时间等信息

注意2: renameTo方法用于对物理文件名称进行修改,但是并不会修改File对象的name属性。
文件常用方法1
package file; import java.io.File; import java.util.Date; public class TestFile { public static void main(String[] args) { File f = new File("d:/LOLFolder/LOL.exe"); System.out.println("当前文件是:" +f); //文件是否存在 System.out.println("判断是否存在:"+f.exists()); //是否是文件夹 System.out.println("判断是否是文件夹:"+f.isDirectory()); //是否是文件(非文件夹) System.out.println("判断是否是文件:"+f.isFile()); //文件长度 System.out.println("获取文件的长度:"+f.length()); //文件最后修改时间 long time = f.lastModified(); Date d = new Date(time); System.out.println("获取文件的最后修改时间:"+d); //设置文件修改时间为1970.1.1 08:00:00 f.setLastModified(0); //文件重命名 File f2 =new File("d:/LOLFolder/DOTA.exe"); f.renameTo(f2); System.out.println("把LOL.exe改名成了DOTA.exe"); System.out.println("注意: 需要在D:\\LOLFolder确实存在一个LOL.exe,\r\n才可以看到对应的文件长度、修改时间等信息"); } }
步骤 3 :

文件常用方法2

edit
package file; import java.io.File; import java.io.IOException; public class TestFile { public static void main(String[] args) throws IOException { File f = new File("d:/LOLFolder/skin/garen.ski"); // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) f.list(); // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) File[]fs= f.listFiles(); // 以字符串形式返回获取所在文件夹 f.getParent(); // 以文件形式返回获取所在文件夹 f.getParentFile(); // 创建文件夹,如果父文件夹skin不存在,创建就无效 f.mkdir(); // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹 f.mkdirs(); // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常 f.createNewFile(); // 所以创建一个空文件之前,通常都会创建父目录 f.getParentFile().mkdirs(); // 列出所有的盘符c: d: e: 等等 f.listRoots(); // 刪除文件 f.delete(); // JVM结束的时候,刪除文件,常用于临时文件的删除 f.deleteOnExit(); } }
步骤 4 :

练习-遍历文件夹

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。

遍历这个目录下所有的文件(不用遍历子目录)

找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名

注: 最小的文件不能是0长度
练习-遍历文件夹
步骤 5 :

答案-遍历文件夹

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分6秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package file; import java.io.File; public class TestFile { public static void main(String[] args) { File f = new File("c:\\windows"); File[] fs = f.listFiles(); if(null==fs) return; long minSize = Integer.MAX_VALUE; long maxSize = 0; File minFile = null; File maxFile = null; for (File file : fs) { if(file.isDirectory()) continue; if(file.length()>maxSize){ maxSize = file.length(); maxFile = file; } if(file.length()!=0 && file.length()<minSize){ minSize = file.length(); minFile = file; } } System.out.printf("最大的文件是%s,其大小是%,d字节%n",maxFile.getAbsoluteFile(),maxFile.length()); System.out.printf("最小的文件是%s,其大小是%,d字节%n",minFile.getAbsoluteFile(),minFile.length()); } }
步骤 6 :

练习-遍历子文件夹

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
同上的练习,要求遍历子文件夹
步骤 7 :

答案-遍历子文件夹

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分36秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


使用递归来进行文件夹的遍历
package file; import java.io.File; public class TestFile { static long minSize = Integer.MAX_VALUE; static long maxSize = 0; static File minFile = null; static File maxFile = null; //使用递归来遍历一个文件夹的子文件 public static void listFiles(File file){ if(file.isFile()){ if(file.length()>maxSize){ maxSize = file.length(); maxFile = file; } if(file.length()!=0 && file.length()<minSize){ minSize = file.length(); minFile = file; } return; } if(file.isDirectory()){ File[] fs = file.listFiles(); if(null!=fs) for (File f : fs) { listFiles(f); } } } public static void main(String[] args) { File f = new File("c:\\windows"); listFiles(f); System.out.printf("最大的文件是%s,其大小是%,d字节%n",maxFile.getAbsoluteFile(),maxFile.length()); System.out.printf("最小的文件是%s,其大小是%,d字节%n",minFile.getAbsoluteFile(),minFile.length()); } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2019-11-16 剔除字节为0的文件失败
zhangyixing1007




我设置了条件来剔除字节为0的文件,可是为什么结果里还是会出现字节为0的文件呢? 我的打印结果为 The maximum file is c:\windows\explorer.exe of 4612520 bytes. The minimum file is c:\windows\addins of 0 bytes.
import java.lang.reflect.Array; 
import java.io.File;
import java.io.IOException;
 
public class TestFile {
 
    public static void main(String[] args) throws IOException {
		
		File file = new File("c:/windows");
		File[] files= file.listFiles();
		int max = -1, min = -1;
		for (int i = 0; i < files.length; i++){
			if (min == -1 || (files[i].isFile() && 
			files[i].length()<files[min].length() &&
			files[i].length()>0))
				min = i;
			if (max == -1 || (files[i].isFile() && 
			files[i].length()>files[max].length()))
				max = i;				
		}
		
		System.out.println("The maximum file is "
		+files[max] +" of "+files[max].length()+" bytes.");
		System.out.println("The minimum file is "
		+files[min] +" of "+files[min].length()+" bytes.");
    }
}

							


2 个答案

curlycode
答案时间:2019-11-21
files[-1]不会下标越界吗

xiaosa赖
答案时间:2019-11-20
如果是一开始files[0].length()就为0的话...



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-11-14 排序算文件大小
垃圾




交作业。没有遍历出来全部的文件。。遍历子文件的时候报空指针。 先交第一题的
File f = new File("C:\\Windows");	
		File[] fs = f.listFiles();	
		for(int i = 0;i<fs.length;i++) {
			System.out.println(fs[i]+"文件大小:"+fs[i].length());
		}	
		Arrays.sort(fs,new Comparator<File>() {
			@Override
			public int compare(File o1, File o2) {
				long size1 = o1.length();
				long size2 = o2.length();
				if(size1<size2) {
					return -1;
				}else if(size1>size2) {
					return 1;
				}			
				return 0;
			}
		});
		System.out.println("排序后");
		for (File file : fs) {
			if(file.length()!=0) {
				System.out.println("最小的文件:"+file+"长度是:"+file.length());
				System.out.println("最大的文件:"+fs[fs.length-1]+"长度是:"+fs[fs.length-1].length());
				return;
			}
		}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-11-09 广搜EZ,深搜要死惹
2019-11-08 第二题简单粗暴做法
2019-11-07 作业
2019-11-05 请问,为什么Mac 电脑使用 File 遍历文件时,以桌面为开始路径可以,以根目录为开始路径就不行
2019-11-05 苹果电脑为什么不能获取绝对路径呢
2019-11-01 交作业
2019-11-01 交作业
2019-10-30 创建文件夹和文件的时候,如果父文件夹里已经有同名文件夹或文件,则无法成功创建,但又没有抛出异常 怎么才能抛出这个异常呢
2019-10-16 来了老弟
2019-10-16 来了老弟
2019-10-14 如题
2019-10-04 遍历文件
2019-09-23 交作业-遍历文件夹(不包含子目录)
2019-09-23 交作业-遍历文件夹(包含子目录)
2019-09-19 遍历文件(加子目录)递归做法
2019-09-19 遍历文件夹(不遍历子目录)
2019-09-19 遍历文件夹作业
2019-09-18 第一题作业
2019-09-18 new File("d:/LoLFolder")并不会直接创建文件夹
2019-09-18 递归 出现 Exception in thread "main" java.lang.NullPointerException
2019-09-14 递归调用中fs引用的指向问题
2019-09-13 作业一
2019-09-12 作业-遍历文件夹
2019-09-12 作业
2019-09-07 作业
2019-09-04 遍历子文件——求最大/最小文件(递归法)
2019-09-04 遍历文件夹——求最大/最小文件
2019-08-30 关于创建File对象的问题
2019-08-29 遍历子文件
2019-08-29 交作业 第一题
2019-08-18 交作业
2019-08-18 交作业
2019-08-13 为什么结果中文件大小和实际的不同?
2019-08-12 比较简洁的解答
2019-08-09 步骤2 中若是是LOL.exe存在的文件夹下再新建一个DATO.exe则run后,LOL.exe会一直存在,为什么?????????????????
2019-08-08 作业一
2019-08-07 第一道题 很奇怪 答案是0 C:\WINDOWS\addins
2019-08-02 为什么在文件目录下看不到创建的文件?
2019-08-02 交作业1
2019-08-01 各位检查下我的作业
2019-08-01 各位检查下我的作业
2019-07-30 两题写在一个类里了,第二个深搜
2019-07-29 今天突然提示找不到或无法加载主类,怎么解决呢
2019-07-28 作业:遍历父目录文件以及子目录文件
2019-07-27 作业:递归判断文件大小
2019-07-26 第一次交作业
2019-07-24 交作业,第一个练习
2019-07-24 交作业
2019-07-24 第一题
2019-07-24 第一题
2019-07-23 作业:遍历父目录文件以及子目录文件
2019-07-23 作业:遍历父目录文件
2019-07-23 作业一:遍历文件夹
2019-07-13 练习二递归交作业
2019-07-12 第一个遍历文件问题
2019-07-08 你系腚了。
2019-07-08 交作业,第一题
2019-06-26 关于文件访问权限的问题
2019-06-25 相同代码结果不一样
2019-06-25 相同代码结果不一样
2019-06-14 遍历文件夹
2019-06-09 练习一
2019-06-08 交作业:遍历子文件夹
2019-06-08 递归脑壳疼
2019-05-31 最小最大文件,交作业
2019-05-31 作业第二题
2019-05-30 作业第一题
2019-05-29 作业第一题
2019-05-27 递归文件以及子文件夹
2019-05-26 回来复习啦
2019-05-26 第二题
2019-05-24 HomeWork
2019-05-24 ZZ交作业 文件对象 遍历文件夹
2019-05-24 ZZ交作业 文件对象 遍历文件夹及子文件夹
2019-05-22 写作业
2019-05-21 方法比较笨,有点难受
2019-05-04 你好老师:你视频中运行的代码并没有考虑到文件夹的情况,为什么结果也是正确的呢?
2019-04-29 遍历
2019-04-29 旋转跳跃
2019-04-23 遍历子文件夹,复制了答案,在eclicpse上运行出现空指针错误
2019-04-23 第一题,我感觉没啥问题了,得到的最小还是0
2019-04-21 【“学长”的思维导图分享之IO】这一章,欢迎交流、参考呀
2019-04-21 【学长的思维导图】基于IO整个这一章而做,欢迎交流参考
2019-04-17 交作业(一),欢迎暂时没思路的朋友来交流参考
2019-04-13 为什么"C:/windows"可以运行换为"E:\\Games"就不可以了,
2019-04-12 遍历子文件夹
2019-04-09 交作业,第一题遍历子文件,第二题用递归遍历子文件及子文件夹
2019-04-09 交作业------求最大最小文件
2019-04-09 交作业
2019-04-08 交作业
2019-03-28 答案
2019-03-28 问题1
2019-03-27 第二题练习 结果类定义,递归遍历
2019-03-24 交作业
2019-03-22 文件夹的大小不能用length(),那文件夹的大小该用啥方法得到呢
2019-03-15 上交作业