• Java文件输入输出(简单易懂版)


    写在前面

    1. 在Java中不论文件输入还是输出都会用到File类,参考这篇文章Java File类(文件操作类)详解
    2. 这里会涉及到绝对路径、相对路径、路径中的斜杠“/”和反斜杠“\”,有些小伙伴可能不熟悉,参考这两篇文章绝对路径和相对路径详解斜杠’/’ 和反斜杠’’

    文件输入

    我们先来看一下此处的路径,Test.java是我们的程序代码,Coldplay.txt 是我们待会儿要读的文件。
    在这里插入图片描述
    废话不多说,直接上代码:

    import java.io.File;
    import java.io.IOException;
    import java.util.*;
    
    public class Test {
        // 如果用一个不存在的文件构造 Scanner 可能会抛出I/O异常
        // 为了简单起见,只要在方法头中声明 throws Exception 即可
        public static void main(String[] args) throws IOException {
            // File 类是一个代表文件或目录的类,通常使用路径来初始化,允许使用绝对路径和相对路径
            // 此处使用相对路径
            File infile = new File("Coldplay.txt");
    
            // 读文件, 并将读到的内容打印到控制台
            // 为了避免一些乱码问题,我们制定编码方式为 UTF-8
            Scanner in = new Scanner(infile, "UTF-8");
            while (in.hasNext()) {
                String s = in.nextLine();
                System.out.println(s);
            }
    
            // 释放资源
            in.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    可以看到控制台上确实把 Coldplay.txt 中的内容打印了出来。
    在这里插入图片描述

    另外关于路径有一点要说明,上面这个代码用的是相对路径,因为 Test.java 和 Coldplay.txt 在一个目录下,所以 “Coldplay.txt” 就可以;当然我们也可以用绝对路径,但是要注意
    “D:\java_code\Coldplay.txt” ×
    “D:\\java_code\\Coldplay.txt” √
    “D:/java_code/Coldplay.txt” √
    这是因为反斜杠\既可以在windows里表示路径分隔符,也可以在Java里表示转义字符,所以我们如果按照第一行的写法,Java不知道我们到底想表示路径分隔符还是转义字符
    所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线(第二行)或直接使用斜线“/”也可以(第三行。这是因为Java 程序支持将斜线“/”当成平台无关的路径分隔符)

    文件输出

    先看代码:

    import java.io.File;
    import java.io.PrintWriter;
    import java.io.IOException;
    
    public class Test {
        // 如果用一个无法创建的文件名构造PrintWriter,可能会产生 I/O 异常
        // 为了简单起见,只要在方法头中声明 throws Exception 即可
        public static void main(String[] args) throws IOException {
            // File 类是一个代表文件或目录的类,通常使用路径来初始化,允许使用绝对路径和相对路径
            // 这里我们使用相对路径
            File outfile = new File("JayChou.txt");
    
            // 检查scores.txt是否存在,如果存在退出程序
            // 如果想实现重写覆盖,把这段注释掉就可以了
            if (outfile.exists()) {
                System.out.println("File already exists.");
                System.exit(1);
            }
    
            // 如果不存在则写文件
            // 为了避免一些乱码问题,我们制定编码方式为 UTF-8
            PrintWriter out = new PrintWriter(outfile, "UTF-8");
            out.print("Jay chou ");
            out.println("is a pop music star.");
            out.println("稻香");
            out.println("夜曲");
            out.println("青花瓷");
    
            // 释放资源
            out.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    可以看到确实多出来一个JayChou.txt,而且打开这个txt文件发现并不存在乱码。
    在这里插入图片描述

    在这里插入图片描述
    关于编码这里我多说几句,一开始我写的是PrintWriter out = new PrintWriter(outfile);并没有加第二个参数 “UTF-8”,然后打开txt文件后发现是乱码。
    出现乱码的原因是操作系统和Java程序使用的编码格式不同。中文Windows OS默认使用的是GBK编码,而IDE默认使用的是UTF-8编码。在Java中写入的汉字用的是IDE默认的UTF-8编码,而用txt去看则用的是操作系统默认的GBK编码,二者编码方式不一致所以会出现乱码。为了避免可能的中文乱码问题,最好在读写文件的时候显式指定编码格式,我们一般指定为UTF-8。

  • 相关阅读:
    聚观早报 | 白酒品牌频跨界;微软发布统一版本Copilot
    Java泛型方法与普通成员方法以及案例说明(五)
    Win11系统更新KB5014668后点开始按钮没反应怎么办?
    【C语言学习笔记---内存函数】
    【PyCharm Community Edition】:打印日志保存成文档
    Docker部署jenkins
    【目标检测】52、YOLOP | 一次就能完成全景驾驶的三大任务
    一般哪些原因会造成硬盘损坏呢
    MongoDB安装及常用语句总结
    西山居测试开发工程师一面
  • 原文地址:https://blog.csdn.net/Aa_Lyang/article/details/128191406