how2j.cn


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


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



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



步骤 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  姿势不对,事倍功半! 点击查看做练习的正确姿势
一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。

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

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

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

答案-遍历文件夹

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

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


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  姿势不对,事倍功半! 点击查看做练习的正确姿势
同上的练习,要求遍历子文件夹
步骤 7 :

答案-遍历子文件夹

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

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


使用递归来进行文件夹的遍历
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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-03-06 我为什么第二题怎么跑都出不了结果啊,是不是哪里死循环了,有大哥帮看下嘛,我实在找不出了
momoso




好像是文件数组哪里循环出了问题,但是我找不出来
package file;
  
import java.io.File;
import java.util.Date;
  
public class TestFile {
  
    public static void main(String[] args) {
  
        File f = new File("C:/WINDOWS");
        System.out.println("当前文件是:" +f);
        
        //以文件数组的形式,返回当前文件夹下的所有文件
        File fs[] = f.listFiles();
        File fmax;
        File fmin;
        for (int j = 0; j < fs.length; j++) {
            for (int i = 0; i < fs.length-j-1; i++) {
                if(fs[i].length()>fs[i+1].length()){ 
                	File f1 = fs[i];
                	fs[i] = fs[i+1];
                	fs[i+1] = f1;
                }
            }
        }
        fmax = fs[fs.length-1];
        fmin = fs[0];
        
        System.out.println("最大的文件是:" + fmax.getAbsolutePath() + "其大小是:"+fmax.length());
        System.out.println("最小的文件是:" + fmin.getAbsolutePath() + "其大小是:"+fmin.length());
        
        
        File fmax2;
        File fmin2;
        File ffinalmax = fmin;
        File ffinalmin = fmax;
        
        String a = f.getParent();
        System.out.println(a);
        //fs是最前面的大目录生产的文件数组
        //fc是子文件夹生成的文件数组
        for(int i =0; i<fs.length; i++) {
        	
        	if(fs[i].isDirectory()==false) {
        		continue;
        	}
        	if(fs[i]==null) {
        		continue;
        	}
        	
        	
        	if(fs[i].isDirectory()==true) {
        		File fc[] = fs[i].listFiles();//子文件夹返回当前文件的文件数组
        		if(fc ==null) {
        			continue;
        		}
        		if(fc.length==0) {
        			continue;
        		}
        		for (int j = 0; j < fc.length; j++) {
                    for (int i1 = 0; i1 < fc.length-j-1; i1++) {
                        if(fc[i1].length()>fc[i1+1].length()){ 
                        	File f1 = fc[i1];
                        	fc[i1] = fc[i1+1];
                        	fc[i1+1] = f1;
                        }
                    }
                }
        		
        		if(fc.length!=0) {
        			fmax2 = fc[fc.length-1];
                    fmin2 = fc[0];
                    
                    if (fmax2.length()>ffinalmax.length()) {
                    	ffinalmax = fmax2;
                    }
                    if (fmin2.length()<ffinalmin.length()) {
                    	ffinalmin = fmin2;
                    }
        		}
        		
        		
                
        	}
        	 
        }
        System.out.println("所有子文件夹最大的文件是:" + ffinalmax.getAbsolutePath() + "其大小是:"+ffinalmax.length());
        System.out.println("最小的文件是:" + ffinalmin.getAbsolutePath() + "其大小是:"+ffinalmin.length());
        
        
        
        
    }
}

							


5 个答案

gongming
答案时间:2022-04-28
daban2009
答案时间:2022-04-16
windows中有的文件需要权限可以访问,不然会io错误返回null,换个文件夹试试

hoolich
答案时间:2022-03-31
/*一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。 遍历这个目录下所有的文件(不用遍历子目录) 找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名 注: 最小的文件不能是0长度*/ package file; import java.io.File; import java.util.Date; public class TestFile { // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) static long minSize = Integer.MAX_VALUE; static long maxSize = 0; static File Maxfile= null; static File Minfile= null; //使用递归来遍历一个文件夹的子文件 public static void listFiles(File file) { if(file.isFile()) { System.out.println(file.getAbsoluteFile()); if (file.length() > maxSize) { maxSize = file.length(); Maxfile = file; } if (file.length() > 0 && file.length() < minSize) { minSize = file.length(); Minfile =file; } } 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("/Users/chenqiang/Desktop"); listFiles(f); //输出 System.out.printf("最大的文件是%s,其大小是%,d字节%n",Maxfile.getAbsoluteFile(),maxSize); System.out.printf("最小的文件是%s,其大小是%,d字节%n",Minfile.getAbsoluteFile(),minSize); } }

hoolich
答案时间:2022-03-31
/*一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。 遍历这个目录下所有的文件(不用遍历子目录) 找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名 注: 最小的文件不能是0长度*/ package file; import java.io.File; import java.util.Date; public class TestFile { public static void main(String[] args) { File f = new File("/Users/chenqiang/Desktop"); // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹) File[]fs= f.listFiles(); if(null==fs) return; long minSize = Integer.MAX_VALUE; long maxSize = 0; File Maxfile= null; File Minfile= null; for(File each:fs){ System.out.println(each.getAbsoluteFile()); if(each.length()>maxSize){ maxSize=each.length(); Maxfile=each; } if(each.length()>0&&each.length()<minSize){ minSize=each.length(); Minfile=each; } } //输出 System.out.printf("最大的文件是%s,其大小是%,d字节%n",Maxfile.getAbsoluteFile(),maxSize); System.out.printf("最小的文件是%s,其大小是%,d字节%n",Minfile.getAbsoluteFile(),minSize); } }

momoso
答案时间:2022-03-06
我用联系题提供的答案也没跑出来,太久了



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





2022-01-13 练习题
suren




进行了注释
第一 ===================================================================================================================
package com.xin.io.file;

import java.io.File;

public class FileTestDemo01 {
    public static void main(String[] args) {
        /*
        * 遍历C:\WINDOWS这个目录下所有的文件(不用遍历子目录)
        * 找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名
        * */

        File f = new File("c:/WINDOWS");
        File[] fs = f.listFiles();//以文件数组形式获取当前文件下的所有文件
        if (null==fs){
            return;
        }
        long minSize = Integer.MAX_VALUE;//定义一个最大值,方便后面最小值的赋值
        long maxSize = 0;//定义为0,方便后面最大值的赋值
        //定义最大字节和最小文件
        File maxFile = null;
        File minFile = null;
        for (File file:fs){
            if (file.isDirectory()){
                continue;//如果是文件夹,则跳出此次循环
            }
            //如果文件字节大小大于0
            if (file.length()>maxSize){
                maxSize = file.length();//将字节大小赋值给maxSize
                maxFile = file;//将文件名赋值给maxFile
            }
            //判断文件字节大小不为o,且小于minSize,
            //第二次循环进来的时候,如果第二次文件字节大小小于第一次,则再一次进行赋值,循环结束,则有最小字节数
            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());

        System.out.println("最大的文件是"+maxFile+",其大小是"+maxSize+"字节");
        System.out.println("最小的文件是"+minFile+",其大小是"+minSize+"字节");

    }
}


第二 ===================================================================================================================
package com.xin.io.file;

import java.io.File;

public class FileTestDemo02 {
    static long minSize = Integer.MAX_VALUE;//定义一个最大值,方便后面最小值的赋值
    static long maxSize = 0;//定义为0,方便后面最大值的赋值
    //定义最大字节和最小文件
    static File maxFile = null;
    static File minFile = null;

    //上一题的方法
    public static void listFiles(File file){
        //判断是否为文件
        if (file.isFile()){
            //如果文件字节大小大于0
            if (file.length()>maxSize){
                maxSize = file.length();//将字节大小赋值给maxSize
                maxFile = file;//将文件名赋值给maxFile
            }
            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.println("最大的文件是"+maxFile+",其大小是"+maxSize+"字节");
        System.out.println("最小的文件是"+minFile+",其大小是"+minSize+"字节");
    }
}

							


1 个答案

dyf137
答案时间:2022-02-28
最大的文件是C:\WINDOWS\MEMORY.DMP,其大小是1189428658字节 最小的文件是C:\WINDOWS\Tasks\SA.DAT,其大小是6字节



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





2022-01-05 答:练习2
2021-12-10 两题答案
2021-12-08 问题有点差了吧,到底是所有的子目录还是只是下一级子目录


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 171 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-I/O-文件对象 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图