1. java.io.File 类的使用

末蓝、 2023-10-12 15:38 27阅读 0赞

1.1 概述
• File 类及本章下的各种流,都定义在 java.io 包下。
• 一个 File 对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),
与平台无关。(体会万事万物皆对象)
• File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要
访问文件内容本身,则需要使用输入/输出流。
– File 对象可以作为参数传递给流的构造器。
• 想要在 Java 程序中表示一个真实存在的文件或目录,那么必须有一个 File 对象,但是
Java 程序中的一个 File 对象,可能没有一个真实存在的文件或目录。

1.2 构造器

  1. public File(String pathname) :以 pathname
  2. 为路径创建 File 对象,可以是
  3. 绝对路径或者相对路径,如果 pathname 是相对路径,
  4. 则默认的当前路径在系统属性user.dir 中存储。
  5. public File(String parent, String child)
  6. parent 为父路径,child 为子路径创建 File 对象。
  7. public File(File parent, String child)
  8. 根据一个父 File 对象和子文件路径创建 File 对象

关于路径:
• 绝对路径:从盘符开始的路径,这是一个完整的路径。
• 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。> – IDEA 中,main 中的文件的相对路径,是相对于”当前工程” – IDEA 中,单元测试方法中的文件的相对路径,是相对于”当前
module

举例:

  1. package com.atguigu.file;
  2. import java.io.File;
  3. public class FileObjectTest {
  4. public static void main(String[] args) {
  5. // 文件路径名
  6. String pathname = "D:\\aaa.txt";
  7. File file1 = new File(pathname);
  8. // 文件路径名
  9. String pathname2 = "D:\\aaa\\bbb.txt";
  10. File file2 = new File(pathname2);
  11. // 通过父路径和子路径字符串
  12. String parent = "d:\\aaa";
  13. String child = "bbb.txt";
  14. File file3 = new File(parent, child);
  15. // 通过父级 File 对象和子路径字符串
  16. File parentDir = new File("d:\\aaa");
  17. String childFile = "bbb.txt";
  18. File file4 = new File(parentDir, childFile);
  19. }
  20. @Test
  21. public void test01() throws IOException{
  22. File f1 = new File("d:\\atguigu\\javase\\HelloIO.java"); //绝
  23. 对路径
  24. System.out.println("文件/目录的名称:" + f1.getName());
  25. System.out.println("文件/目录的构造路径名:" + f1.getPath());
  26. System.out.println("文件/目录的绝对路径名:" + f1.getAbsolutePa
  27. th());
  28. System.out.println("文件/目录的父目录名:" + f1.getParent());
  29. }
  30. @Test
  31. public void test02()throws IOException{
  32. File f2 = new File("/HelloIO.java");//绝对路径,从根路径开始
  33. System.out.println("文件/目录的名称:" + f2.getName());
  34. System.out.println("文件/目录的构造路径名:" + f2.getPath());
  35. System.out.println("文件/目录的绝对路径名:" + f2.getAbsolutePa
  36. th());
  37. System.out.println("文件/目录的父目录名:" + f2.getParent());
  38. }
  39. @Test
  40. public void test03() throws IOException {
  41. File f3 = new File("HelloIO.java");//相对路径
  42. System.out.println("user.dir =" + System.getProperty("user.di
  43. r"));
  44. System.out.println("文件/目录的名称:" + f3.getName());
  45. System.out.println("文件/目录的构造路径名:" + f3.getPath());
  46. System.out.println("文件/目录的绝对路径名:" + f3.getAbsolutePa
  47. th());
  48. System.out.println("文件/目录的父目录名:" + f3.getParent());
  49. }
  50. @Test
  51. public void test04() throws IOException{
  52. File f5 = new File("HelloIO.java");//相对路径
  53. System.out.println("user.dir =" + System.getProperty("user.di
  54. r"));
  55. System.out.println("文件/目录的名称:" + f5.getName());
  56. System.out.println("文件/目录的构造路径名:" + f5.getPath());
  57. System.out.println("文件/目录的绝对路径名:" + f5.getAbsolutePa
  58. th());
  59. System.out.println("文件/目录的父目录名:" + f5.getParent());
  60. }
  61. }

注意:

  1. 无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。
  2. window 的路径分隔符使用“\”,而 Java 程序中的“\”表示转义字符,
    所以在 Windows 中表示路径,需要用“\”。或者直接使用“/”也可
    以,Java 程序支持将“/”当成平台无关的路径分隔符。或者直接使用
    File.separator 常量值表示。比如:
    File file2 = new File(“d:” + File.separator + “atguigu” + File.separator
    +“info.txt”);
  3. 当构造路径是绝对路径时,那么 getPath 和 getAbsolutePath 结果一

    当构造路径是相对路径时,那么 getAbsolutePath 的路径 = user.dir
    的路径 + 构造路径

1.3 常用方法
1、获取文件和目录基本信息
• public String getName() :获取名称
• public String getPath() :获取路径
• public String getAbsolutePath():获取绝对路径
• public File getAbsoluteFile():获取绝对路径表示的文件
• public String getParent():获取上层文件目录路径。若无,返回 null
• public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
• public long lastModified() :获取最后一次的修改时间,毫秒值
如果 File 对象代表的文件或目录存在,则 File 对象实例初始化时,就
会用硬盘中对应文件或目录的属性信息(例如,时间、类型等)为
File 对象的属性赋值,否则除了路径和名称,File 对象的其他属性将会
保留默认值
在这里插入图片描述

  1. package com.atguigu.file;
  2. import java.io.File;
  3. import java.time.Instant;
  4. import java.time.LocalDateTime;
  5. import java.time.ZoneId;
  6. public class FileInfoMethod {
  7. public static void main(String[] args) {
  8. File f = new File("d:/aaa/bbb.txt");
  9. System.out.println("文件构造路径:"+f.getPath());
  10. System.out.println("文件名称:"+f.getName());
  11. System.out.println("文件长度:"+f.length()+"字节");
  12. System.out.println("文件最后修改时间:" + LocalDateTime.ofInsta
  13. nt(Instant.ofEpochMilli(f.lastModified()),ZoneId.of("Asia/Shanghai
  14. ")));
  15. File f2 = new File("d:/aaa");
  16. System.out.println("目录构造路径:"+f2.getPath());
  17. System.out.println("目录名称:"+f2.getName());
  18. System.out.println("目录长度:"+f2.length()+"字节");
  19. System.out.println("文件最后修改时间:" + LocalDateTime.ofInsta
  20. nt(Instant.ofEpochMilli(f.lastModified()),ZoneId.of("Asia/Shanghai
  21. ")));
  22. }
  23. }
  24. 输出结果:
  25. 文件构造路径:d:\aaa\bbb.java
  26. 文件名称:bbb.java
  27. 文件长度:636 字节
  28. 文件最后修改时间:2022-07-23T22:01:32.065
  29. 目录构造路径:d:\aaa
  30. 目录名称:aaa
  31. 目录长度:4096 字节
  32. 文件最后修改时间:2022-07-23T22:01:32.065

2、列出目录的下一级
• public String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目
录。
• public File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目

  1. package com.atguigu.file;
  2. import org.junit.Test;
  3. import java.io.File;
  4. import java.io.FileFilter;
  5. import java.io.FilenameFilter;
  6. public class DirListFiles {
  7. @Test
  8. public void test01() {
  9. File dir = new File("d:/atguigu");
  10. String[] subs = dir.list();
  11. for (String sub : subs) {
  12. System.out.println(sub);
  13. }
  14. }
  15. }

3、File 类的重命名功能
• public boolean renameTo(File dest):把文件重命名为指定的文件路径。

4、判断功能的方法
• public boolean exists() :此 File 表示的文件或目录是否实际存在。
• public boolean isDirectory() :此 File 表示的是否为目录。
• public boolean isFile() :此 File 表示的是否为文件。
• public boolean canRead() :判断是否可读
• public boolean canWrite() :判断是否可写
• public boolean isHidden() :判断是否隐藏

举例:

  1. package com.atguigu.file;
  2. import java.io.File;
  3. public class FileIs {
  4. public static void main(String[] args) {
  5. File f = new File("d:\\aaa\\bbb.java");
  6. File f2 = new File("d:\\aaa");
  7. // 判断是否存在
  8. System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());
  9. System.out.println("d:\\aaa 是否存在:"+f2.exists());
  10. // 判断是文件还是目录
  11. System.out.println("d:\\aaa 文件?:"+f2.isFile());
  12. System.out.println("d:\\aaa 目录?:"+f2.isDirectory());
  13. }
  14. }

输出结果:
d:\aaa\bbb.java 是否存在:true
d:\aaa 是否存在:true
d:\aaa 文件?:false
d:\aaa 目录?:true
如果文件或目录不存在,那么 exists()、isFile()和 isDirectory()都是返回
true

5、创建、删除功能

  1. public boolean createNewFile() :创建文件。若文件存在,则不创建,返回
  2. false
  3. public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。
  4. 如果此文件目录的上层目录不存在,也不创建。
  5. public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创
  6. 建。
  7. public boolean delete() :删除文件或者文件夹 删除注意事项:① Java 中的
  8. 删除不走回收站。② 要删除一个文件目录,请注意该文件目录内不能包含文件或者
  9. 文件目录。

举例:

  1. package com.atguigu.file;
  2. import java.io.File;
  3. import java.io.IOException;
  4. public class FileCreateDelete {
  5. public static void main(String[] args) throws IOException {
  6. // 文件的创建
  7. File f = new File("aaa.txt");
  8. System.out.println("aaa.txt 是否存在:"+f.exists());
  9. System.out.println("aaa.txt 是否创建:"+f.createNewFile());
  10. System.out.println("aaa.txt 是否存在:"+f.exists());
  11. // 目录的创建
  12. File f2= new File("newDir");
  13. System.out.println("newDir 是否存在:"+f2.exists());
  14. System.out.println("newDir 是否创建:"+f2.mkdir());
  15. System.out.println("newDir 是否存在:"+f2.exists());
  16. // 创建一级目录
  17. File f3= new File("newDira\\newDirb");
  18. System.out.println("newDira\\newDirb 创建:" + f3.mkdir());
  19. File f4= new File("newDir\\newDirb");
  20. System.out.println("newDir\\newDirb 创建:" + f4.mkdir());
  21. // 创建多级目录
  22. File f5= new File("newDira\\newDirb");
  23. System.out.println("newDira\\newDirb 创建:" + f5.mkdirs());
  24. // 文件的删除
  25. System.out.println("aaa.txt 删除:" + f.delete());
  26. // 目录的删除
  27. System.out.println("newDir 删除:" + f2.delete());
  28. System.out.println("newDir\\newDirb 删除:" + f4.delete());
  29. }
  30. }

运行结果:
aaa.txt 是否存在:false
aaa.txt 是否创建:true
aaa.txt 是否存在:true
newDir 是否存在:false
newDir 是否创建:true
newDir 是否存在:true
newDira\newDirb 创建:false
newDir\newDirb 创建:true
newDira\newDirb 创建:true
aaa.txt 删除:true
newDir 删除:false
newDir\newDirb 删除:true
API 中说明:delete 方法,如果此 File 表示目录,则目录必须为空才能
删除

发表评论

表情:
评论列表 (有 0 条评论,27人围观)

还没有评论,来说两句吧...

相关阅读

    相关 1. java.io.File 使用

    1.1 概述 • File 类及本章下的各种流,都定义在 java.io 包下。 • 一个 File 对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),

    相关 2.1.1 Python基本概念

    类,它对应的是英文单词class,“类”是由class翻译过来的,你就把它作为一个翻译术语吧。 除了“类”这个术语外,还要经常提到OOP,即面向对象编程(或者“面向对象程序设