返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java-File类详解(一篇讲透)
  • 619
分享到

Java-File类详解(一篇讲透)

java开发语言intellij-ideaeclipsejar 2023-08-17 12:08:38 619人浏览 安东尼
摘要

File类的使用 前言一、File类概述二、File类的使用1. 绝对路径 vs 相对路径2. 路径分隔符3. 静态成员变量3. 常用构造器4. 常用方法4.1 获取功能4.2 重命名功能4.3 判断功能4.4 创建功能4.5 删除



前言

新星计划,等你来造,一起学习进步!
7月3日-7月15日期间,完成计划任务,完成打卡赢好礼,活动报名链接如下:点击跳转
活动奖励:
❀【新秀奖】新注册用户发布第一篇文章(500字以上)获得电子【新秀勋章】;
❀【基础奖】完成任务挑战用户可获专属电子勋章(潜力新星)+抽奖机会(百分百中奖)
❀【特别奖】各导师评选团队综合top5,获实力新星实体证书/实体奖牌红色款二选一+APP作者推荐关注+实力

一、File类概述

(1) java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关

(2)File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

(3) 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

(4) File对象可以作为参数传递给流的构造器,指明读取或写入的"终点"。

二、File类的使用

1. 绝对路径 vs 相对路径

(1)绝对路径:是一个固定的路径,从盘符开始
(2)相对路径:是相对于某个位置开始

  • main()方法中的相对路径是相对于当前工程
  • 单元测试方法中的相对路径是相对于当前模块

2. 路径分隔符

(1) 路径中的每级目录之间用一个路径分隔符隔开。

(2)路径分隔符和系统有关:

  • windowsDOS系统默认使用"\"来表示
  • UNIX和URL使用"/"来表示

(3) Java程序支持跨平台运行,因此路径分隔符要慎用。
为了解决这个隐患,File类提供了一个常量:
public static final String separator:根据操作系统,动态的提供分隔符。

File file1 = new File("d:\\atguigu\\info.txt");File file2 = new File("d:" + File.separator + "atguigu" + File.separator + "info.txt");File file3 = new File("d:/atguigu");

3. 静态成员变量

静态成员变量描述
public static String pathSeparator系统中多个路径的分隔符 windows;
public static String separator系统中一个路径中多个名称之间的分隔符号 windows\

3. 常用构造器

构造器描述
public File(String pathname)pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
public File(String parent,String child)parent为父路径,child为子路径创建File对象。
public File(File parent,String child)根据一个父File对象和子文件路径创建File对象

代码演示:

//构造器1        File file1 = new File("hello.txt");//相对于当前module        File file2 =  new File("D:\\workspace_idea1\\JavaSeNIOr\\day08\\he.txt");        System.out.println(file1);        System.out.println(file2);        //构造器2:        File file3 = new File("D:\\workspace_idea1","JavaSenior");        System.out.println(file3);        //构造器3:        File file4 = new File(file3,"hi.txt");        System.out.println(file4);    }

4. 常用方法

4.1 获取功能

方法描述
public String getAbsolutePath()获取绝对路径
public String getPath()获取路径
public String getName()获取名称
public String getParent()获取上层文件目录路径。若无,返回null
public long length()获取文件长度(即:字节数)。不能获取目录的长度。
public long lastModified()获取最后一次的修改时间,毫秒值
public String[] list()获取指定目录下的所有文件或者文件目录的字符串数组
public File[] listFiles()获取指定目录下的所有文件或者文件目录的File对象数组

代码演示:

    @Test    public void test2(){        File file1 = new File("hello.txt");        File file2 = new File("d:\\io\\hi.txt");        System.out.println(file1.getAbsolutePath());        System.out.println(file1.getPath());        System.out.println(file1.getName());        System.out.println(file1.getParent());        System.out.println(file1.length());        System.out.println(new Date(file1.lastModified()));        System.out.println();        System.out.println(file2.getAbsolutePath());        System.out.println(file2.getPath());        System.out.println(file2.getName());        System.out.println(file2.getParent());        System.out.println(file2.length());        System.out.println(file2.lastModified());    }    @Test    public void test3(){        File file = new File("D:\\workspace_idea1\\JavaSenior");        String[] list = file.list();        for(String s : list){            System.out.println(s);        }        System.out.println();        File[] files = file.listFiles();        for(File f : files){            System.out.println(f);        }    }

4.2 重命名功能

方法描述
public boolean renameTo(File dest)把文件重命名为指定的文件路径

代码演示:

 @Test    public void test4(){        File file1 = new File("hello.txt");        File file2 = new File("D:\\io\\hi.txt");        boolean renameTo = file2.renameTo(file1);        System.out.println(renameTo);    }

4.3 判断功能

方法描述
public boolean isDirectory()判断是否是文件目录
public boolean isFile()判断是否是文件
public boolean exists()判断是否存在
public boolean canRead()判断是否可读
public boolean canWrite()判断是否可写
public boolean isHidden()判断是否隐藏

代码演示:

  @Test    public void test5(){        File file1 = new File("hello.txt");        file1 = new File("hello1.txt");        System.out.println(file1.isDirectory());        System.out.println(file1.isFile());        System.out.println(file1.exists());        System.out.println(file1.canRead());        System.out.println(file1.canWrite());        System.out.println(file1.isHidden());        System.out.println();        File file2 = new File("d:\\io");        file2 = new File("d:\\io1");        System.out.println(file2.isDirectory());        System.out.println(file2.isFile());        System.out.println(file2.exists());        System.out.println(file2.canRead());        System.out.println(file2.canWrite());        System.out.println(file2.isHidden());    }

4.4 创建功能

方法描述
public boolean createNewFile()创建文件。若文件存在,则不创建,返回false
public boolean mkdir()创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs()创建文件目录。如果上层文件目录不存在,一并创建

注意事项: 如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。

代码演示:

  @Test    public void test6() throws IOException {        File file1 = new File("hi.txt");        if(!file1.exists()){            //文件的创建            file1.createNewFile();            System.out.println("创建成功");        }else{//文件存在            file1.delete();            System.out.println("删除成功");        }    }    @Test    public void test7(){        //文件目录的创建        File file1 = new File("d:\\io\\io1\\io3");        boolean mkdir = file1.mkdir();        if(mkdir){            System.out.println("创建成功1");        }        File file2 = new File("d:\\io\\io1\\io4");        boolean mkdir1 = file2.mkdirs();        if(mkdir1){            System.out.println("创建成功2");        }        //要想删除成功,io4文件目录下不能有子目录或文件        File file3 = new File("D:\\io\\io1\\io4");        file3 = new File("D:\\io\\io1");        System.out.println(file3.delete());    }}

4.5 删除功能

方法描述
public boolean delete()删除文件或者文件夹

注意事项: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。

三、练习

1. 显示文件及文件夹内容

3.

public static void showDir(File srcDir,int count) {    System.out.println("|-" + srcDir.getName());    File[] files = srcDir.listFiles();    count++;    for (File file : files) {        System.out.print(printTab(count));        if (file.isFile()) {            System.out.println("|-" + file.getName());        } else {            showDir(file,count);        }    }}

2. 统计文件夹大小

public static long calculateDirSize(File srcDir) {    long size = 0;    File[] files = srcDir.listFiles();    for (File file : files) {        if (file.isDirectory()) {            size += calculateDirSize(file);        } else {            size += file.length();        }    }    return size;}

3. 复制文件夹

在这里插入图片描述

//使用 commons-io-2.11.0包的工具类,工具类忒好了    public static void copyDirUtil(File srcDir, File desDir) throws IOException {        FileUtils.copyDirectory(srcDir, desDir); //底层也用的递归    }//自己递归实现    public static void copyDir(File srcDir, File desDir) throws IOException {        if (!desDir.exists()) {            desDir.mkdir();        }        File newDir = new File(desDir, srcDir.getName());        newDir.mkdir();        File[] files = srcDir.listFiles();        if (files == null || files.length == 0) {            return;        }        for (File file : files) {            if (file.isDirectory()) {                copyDir(file, newDir);            } else {                FileInputStream fis = new FileInputStream(file);                FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));                byte[] buffer = new byte[1024];                int len = 0;                while ((len = fis.read(buffer)) != -1) {                    fos.write(buffer, 0, len);                }                fis.close();                fos.close();            }        }    }

4. 剪切文件夹

在这里插入图片描述

//使用 commons-io-2.11.0包的工具类,工具类忒好了    public static void cutDirUtil(File srcDir, File desDir) throws IOException {        FileUtils.moveDirectory(srcDir,desDir);            }    //自己实现,在复制后紧接着删除源文件    public static void cutDir(File srcDir, File desDir) throws IOException {        if (!desDir.exists()) {            desDir.mkdir();//删除源文件夹        }        File newDir = new File(desDir, srcDir.getName());        newDir.mkdir();        File[] files = srcDir.listFiles();        if (files == null || files.length == 0) {            srcDir.delete();            return;        }       for (File file : files) {            if (file.isDirectory()) {                cutDir(file, newDir);            } else {                FileInputStream fis = new FileInputStream(file);                FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));                byte[] buffer = new byte[1024];                int len = 0;                while ((len = fis.read(buffer)) != -1) {                    fos.write(buffer, 0, len);                }                fis.close();                fos.close();                //读写完后,删除源文件                file.delete();            }        }        srcDir.delete();    }

5. 删除文件夹

在这里插入图片描述

public static boolean deleteDir(File srcDir) {    File[] files = srcDir.listFiles();    if (files == null || files.length == 0) {        return srcDir.delete();    }    for (File file : files) {        if (file.isDirectory()) {            deleteDir(file);        } else {            file.delete();        }    }    return srcDir.delete();}

6. 复制指定类型文件

在这里插入图片描述

//将符合条件的 文件路径-文件名 存到map集合中    public static Map serchTypeFile(File srcDir, String desFileSuffix) {        Map map = new HashMap<>();        File[] files = srcDir.listFiles();        if (files == null) {            return map;        }        for (File file : files) {            if (file.isDirectory()) {                map.putAll(serchTypeFile(file, desFileSuffix));            } else {                if (file.getName().toLowerCase().endsWith(desFileSuffix)) {                    map.put(file.getAbsoluteFile(), file.getName());                }            }        }        return map;    }    public static void copyTypeDir(File srcDir, File desDir, String desFileSuffix) throws IOException {        Map map = serchTypeFile(srcDir, desFileSuffix);        Set> entries = map.entrySet();        for (Map.Entry entry : entries) {            File key = entry.geTKEy();            String value = entry.getValue();            System.out.println(key + "---" + value);                        //给文件加上时间戳,防止文件重名.             //这里有点问题,时间戳到毫秒值,如果电脑够快,可能两个同名文件加的时间戳一样,会造成文件的覆盖,唉~~             //用(1)(2)的话,可以解决,但每次都要遍历新文件夹,好麻烦啊。            String[] names = key.getName().split("\\."); //正则表达式的关系            SimpleDateFORMat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");            String format = sdf.format(new Date());            String s = names[0] + "(" + format + ")." + names[1];            File file = new File(desDir, s);            FileUtils.copyFile(key,file);        }    }

来源地址:https://blog.csdn.net/weixin_52533007/article/details/123274351

--结束END--

本文标题: Java-File类详解(一篇讲透)

本文链接: https://lsjlt.com/news/372828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java-File类详解(一篇讲透)
    File类的使用 前言一、File类概述二、File类的使用1. 绝对路径 vs 相对路径2. 路径分隔符3. 静态成员变量3. 常用构造器4. 常用方法4.1 获取功能4.2 重命名功能4.3 判断功能4.4 创建功能4.5 删除...
    99+
    2023-08-17
    java 开发语言 intellij-idea eclipse jar
  • 一篇文章讲透Tomcat的类加载机制
    目录-     前言     --     JVM 类加载器&...
    99+
    2024-04-02
  • Java超详细透彻讲解static
    目录1. 引入2. 理解3. 使用3.1 使用范围3.2 static修饰属性3.2.1 设计思想3.2.2 分类3.2.3 注意3.2.4 举例3.2.5 类变量内存解析3.3 s...
    99+
    2024-04-02
  • Java超详细透彻讲解接口
    目录一、引入二、理解三、使用四、应用-代理模式(Proxy)1. 应用场景2. 分类3. 代码演示五、接口和抽象类之间的对比六、经典题目(排错)一、引入 一方面,有时必须从几个类中派...
    99+
    2024-04-02
  • GoLangOS包以及File类型详细讲解
    目录一、OS包的作用二、os.File类型实现了哪些io包的接口三、创建os.File类型的指针类型3.1 os.Create3.2 os.NewFile3.3 os.Open3.4...
    99+
    2023-03-19
    Go os包的File GoLang os包
  • 【Java|基础篇】File类和IO流
    文章目录 1.File类2.流的概念3.InputStream4.OutputStream5.Reader6.Writer7.使用Scanner读文件8.使用PrintWriter写文件9.close()方法10.flush()方法...
    99+
    2023-08-16
    java python 开发语言
  • Java 抽象类详细讲解
    目录 Java抽象类概念 Java抽象类示例 继承Animal类的子类的示例 Java抽象类详细使用方法 1、定义抽象类 2、继承抽象类 3、实现抽象方法 4、完整示例代码 Java抽象类概念 Java中抽象类是指用abstract关键...
    99+
    2023-09-04
    java jvm 开发语言 javase 面向对象
  • 详解Java集合类之Map篇
    目录1.Map接口介绍2.Map接口分析3.Map接口方法4.Map遍历方式1.Map接口介绍 Map用于保存具有映射关系的数据:Key - Value 对于Set,底层其实依然是一...
    99+
    2024-04-02
  • 详解Java集合类之HashSet篇
    目录1.Set接口方法2.HashSet3.HashSet的扩容机制 - 初次添加数据4.HashSet的扩容机制 - 继续添加数据5.HashSet的扩容机制 - 添加重复元素1....
    99+
    2024-04-02
  • 详解Java集合类之List篇
    目录1.集合框架体系2.Collection接口3.迭代器4.List接口5.ArrayListArrayList扩容机制ArrayList使用实例6.Vector7.LinkedL...
    99+
    2024-04-02
  • 【Java 基础篇】Java类加载器详解
    文章目录 导言一、类加载器的概念二、类加载器的工作原理三、类加载器的使用示例四、自定义类加载器总结 导言 Java类加载器(Class Loader)是Java虚拟机(JVM)的一部分,负责将类的字节码加载到内存中,并将其转...
    99+
    2023-08-23
    java 开发语言
  • Java中ThreadPoolExecutor类的详细讲解
    这篇文章主要介绍“Java中ThreadPoolExecutor类的详细讲解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor类的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • Java 中的 File类详情
    目录一、File类简单介绍二、 路径的分类三、 构造方法四、 成员方法一、File类简单介绍 为什么要学习File类呢,他的作用又是什么呢? IO流操作中大部分都是对文件进行...
    99+
    2024-04-02
  • 详解Java集合类之HashTable,Properties篇
    目录1.基本介绍2.HashTable底层3.HashTable扩容机制4.HashMap和HashTable的对比5.Properties6.集合选型规则1.基本介绍 HashTa...
    99+
    2024-04-02
  • JavaIO之File类详解
    目录1、File 类的字段2、File 类的构造方法3、File 类的常用方法①、创建方法②、删除方法③、判断方法④、获取方法4、File 的一些技巧总结File 类:文件和目录路径...
    99+
    2024-04-02
  • Java超详细讲解类的继承
    目录写在前面1.子类的创建1.1子类的创建方法1.2调用父类中特定的构造方法2.在子类中访问父类成员3.覆盖3.1覆盖父类中的方法3.2用父类的对象访问子类的成员4.不可被继承的成员...
    99+
    2024-04-02
  • 详细讲解Java抽象类示例
    目录Java抽象类概念Java抽象类示例继承Animal类的子类的示例Java抽象类详细使用方法1、定义抽象类2、继承抽象类3、实现抽象方法4、完整示例代码Java抽象类概念 Jav...
    99+
    2023-05-19
    Java 抽象 抽象类
  • Java枚举类知识详细讲解
    本篇内容主要讲解“Java枚举类知识详细讲解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java枚举类知识详细讲解”吧!枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常...
    99+
    2023-06-02
  • Python常用框架有哪些?(一篇文章给你讲透)
    前言 Python是一种简单的编程语言,易于学习,在开发的过程中提供了很多中不同的框架供我们学习,今天的这篇文章就带大家了解有哪些框架是好用的,值得我们学习的,有需要的小伙伴可以一起来看看这篇文章哦。...
    99+
    2023-09-25
    python 开发语言 学习
  • Java构造函数通透理解篇
    目录一、什么是构造函数二、构造函数的特点三、示例四、默认构造函数五、构造函数的重载六、构造函数的使用一、什么是构造函数 Java构造函数,也叫构造方法,是JAVA中一种特殊的函数。与...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作