首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java文件操作:从“Hello World”到“Hello File”

Java文件操作:从“Hello World”到“Hello File”

作者头像
用户11935701
发布2025-12-16 08:57:07
发布2025-12-16 08:57:07
1220
举报

文件

什么是文件?

广义:操作系统进行资源管理的一种机制,很多的软件/硬件资源,抽象成“文件”来进行表示。

狭义:保存在硬盘上的文件

文件种类

二进制文件:根据冯诺依曼结构,所有的文件都是二进制的。

文本文件:文本文件是二进制文件中特殊的文件,它的二进制数据恰好可以构成字符,并且翻译过来可以构成有意义的信息。

区分方法:使用笔记本打开,能看懂的就是文本文件。

绝对路径和相对路径

路径是文件在电脑上的存储位置,计算机可以通过路径来找到文件,而路径又分为绝对路径和相对路径。

  • 绝对路径:从根路径到目的文件的完整位置。
代码语言:javascript
复制
D:\Lenovo\Documents
  • 相对路径:以某一个路径为基准的路径,假设你的基准为下述路径中的py_code,那么5.23.py的相对路径就是/5.23.py,code的相对路径就是./
代码语言:javascript
复制
D:\code\py_code\5.23.py

在相对路径中./表示上一层目录,../表示上两层目录(注:没有.../)。

正斜杠与反斜杠

在路径的表达中/\在不同的操作系统作为分隔符来用,在主流的操作系统中/是最常使用的,但是Windos因为历史遗留问题使用的是/来当做路径分隔符,但是现在的Windos系统两种分隔符都可以支持。

Java文件操作

java针对文件操作:

  1. 文件系统操作(删除、新建、重命名)
  2. 文件内容操作(针对一个文件的内容进行读和写)

方法

说明

常用场景

boolean exists()

检查文件/目录是否存在

操作文件前的安全检查

boolean isFile()

判断是否是普通文件

区分文件和目录

boolean isDirectory()

判断是否是目录

遍历目录时检查

String getName()

获取文件/目录名称

获取文件名(不含路径)

String getPath()

获取完整路径字符串

显示或记录文件路径

String getAbsolutePath()

获取绝对路径

需要绝对路径的场景

long length()

获取文件大小(字节数)

检查文件大小

boolean createNewFile()

创建新空文件

需要新建文件时

boolean mkdir()

创建单层目录

新建目录

boolean mkdirs()

创建多级目录

创建嵌套目录结构

boolean delete()

删除文件/空目录

文件清理

String[] list()

列出目录内容

遍历目录文件

File[] listFiles()

列出目录内容(返回File对象)

需要操作子文件时

boolean canRead()

检查是否可读

权限检查

boolean canWrite()

检查是否可写

权限检查

long lastModified()

获取最后修改时间

文件监控/同步

代码演示:

代码语言:javascript
复制
  public static void main(String[] args) throws IOException {

      String fileName = "D:/tmp/crashes/a.txt";
      File file = new File(fileName);
      //createNewFile如果不存在创建并返回true否则只返回False
      if (file.createNewFile()) {
          System.out.println(file.exists());
          System.out.println("创建成功!");
      } else {
          System.out.println("文件已存在!");
      }
      System.out.println(file.getPath());
      System.out.println(file.lastModified());
  }
在这里插入图片描述
在这里插入图片描述

稍微会用即可,如果工作中有需要再查看API文档。

进阶代码:查看当前目录下的所有的文件

代码语言:javascript
复制
    public static void main(String[] args) {
        File file = new File("D:\\code");
        dfs(file, 0);

    }
    public static void dfs(File file, int cnt) {
        if (file.isDirectory()) {
            for (int i = 0; i < cnt * 2; i++) {
                System.out.printf(" ");
            }
            System.out.printf(file.getName() + "{\n");
            for (File f: file.listFiles()) {
                dfs(f, cnt + 1);
            }
            for (int i = 0; i < cnt * 2; i++) {
                System.out.printf(" ");
            }
            System.out.printf("}\n");
        }
        else {
            for (int i = 0; i < cnt * 2; i++) {
                System.out.printf(" ");
            }
            System.out.println(file.getName() + " ");
        }
    }
    //为了输出好看一些,代码写的有点丑哈哈~

流操作

Java 中的文件流操作是 I/O 系统的核心部分,主要用于读写文件数据。

流类型

特点

典型类

字节流

以字节(8bit)为单位操作

InputStream/OutputStream

字符流

以字符(16bit)为单位操作

Reader/Writer

缓冲流

带缓冲区的高效流

BufferedInputStream等

转换流

字节流与字符流转换

InputStreamReader等

字节和字符

字节!=字符,一个字符占多少字节由编码方式决定。例如一个汉字utf-8中占三个字节,而在gbk中占两个字节。

字节流
代码语言:javascript
复制
// 文件复制(字节流)
try (InputStream in = new FileInputStream("source.txt");
     OutputStream out = new FileOutputStream("target.txt")) {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = in.read(buffer)) != -1) {
        out.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}
字符流
代码语言:javascript
复制
// 文本文件读取(字符流)
try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
注意事项

流操作相关的类都需要进行手动关闭,gc虽然能够管理内存,但是不能自动管理文件,需要咱们手动释放。如果不释放就会引起文件资源泄露问题。

因此我们建议使用try-with-resources来进行自动关闭,在try()小括号里面创建并且实现了Closable接口的类都会在结束时自动关闭,而流操作恰好符合这个方式。

代码语言:javascript
复制
try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {
	//代码逻辑
}
总结

字符流和字节流的两个代码,都是对的,不矛盾的~~字节流读到的是文件中原始的数据,在硬盘上保存文件的时候,就是6 个字节(utf-8)。

如果是文本文件建议使用字符流,二进制文件建议使用字节流。

感谢各位的观看Thanks♪(・ω・)ノ,如果觉得满意的话留个关注再走吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件
    • 什么是文件?
    • 文件种类
    • 绝对路径和相对路径
    • 正斜杠与反斜杠
  • Java文件操作
  • 流操作
    • 字节和字符
    • 字节流
    • 字符流
    • 注意事项
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档