Java [ 基础 ] 输入输出 (I/O) 基础 ✨

目录

[✨探索Java基础 Java 输入输出 (I/O) 基础✨](#✨探索Java基础 Java 输入输出 (I/O) 基础✨)

文件读写

文件类 (File)

文件读取 (FileReader 和 BufferedReader)

文件写入 (FileWriter 和 BufferedWriter)

对象序列化

序列化 (Serializable)

反序列化 (Serializable)

示例说明

文件类 (File)

文件读取 (FileReader 和 BufferedReader)

文件写入 (FileWriter 和 BufferedWriter)

对象序列化和反序列化

Java文件读写和对象序列化的面试题及其解答。

[面试题 1:如何检查文件是否存在?如果不存在,如何创建新文件?](#面试题 1:如何检查文件是否存在?如果不存在,如何创建新文件?)

[面试题 2:如何使用BufferedReader读取文件的每一行?](#面试题 2:如何使用BufferedReader读取文件的每一行?)

[面试题 3:如何使用BufferedWriter将文本写入文件并添加换行符?](#面试题 3:如何使用BufferedWriter将文本写入文件并添加换行符?)

[面试题 4:什么是对象序列化?如何实现对象序列化?](#面试题 4:什么是对象序列化?如何实现对象序列化?)

[面试题 5:如何实现对象的反序列化?](#面试题 5:如何实现对象的反序列化?)

结论


✨探索Java基础 Java 输入输出 (I/O) 基础✨

在Java中,输入输出 (I/O) 操作是指与外部设备(如文件、网络、控制台等)进行数据交换的过程。Java提供了丰富的I/O类库,方便开发者进行各种I/O操作。本文将介绍文件读写和对象序列化的基本知识和使用方法。

文件读写

文件读写是指对磁盘上的文件进行读取和写入操作。Java中有多个类和方法来进行文件读写操作,以下是一些常见的类和用法。

文件类 (File)

File类表示文件或目录的路径信息。它不负责文件内容的读写,只提供文件操作的方法,如创建、删除、检查文件是否存在等。

关键方法:

  • exists(): 检查文件或目录是否存在。
  • createNewFile(): 创建一个新的空文件。
  • delete(): 删除文件或目录。
文件读取 (FileReaderBufferedReader)

FileReader用于读取文件中的字符流,而BufferedReader则提供了缓冲功能,可以更高效地读取字符、数组和行。

关键方法:

  • read(): 读取单个字符。
  • readLine(): 读取一行文本。
文件写入 (FileWriterBufferedWriter)

FileWriter用于向文件写入字符流,而BufferedWriter则提供了缓冲功能,可以更高效地写入字符、数组和行。

关键方法:

  • write(): 写入单个字符、字符数组或字符串。
  • newLine(): 写入一个换行符。

对象序列化

对象序列化是指将对象的状态转换为字节流的过程,以便将对象持久化到文件或通过网络传输。Java通过实现Serializable接口来实现对象的序列化和反序列化。

序列化 (Serializable)

要使一个类的对象可序列化,该类必须实现Serializable接口。序列化的主要目的是将对象的状态保存到文件中,以便以后可以恢复。

关键步骤:

  • 实现Serializable接口。
  • 使用ObjectOutputStream将对象写入文件。
反序列化 (Serializable)

反序列化是指将字节流恢复为对象的过程。可以使用ObjectInputStream从文件中读取对象。

关键步骤:

  • 使用ObjectInputStream从文件中读取字节流。
  • 将字节流转换回原始对象。

示例说明

文件类 (File)

File类用于表示文件和目录。以下是一些常见操作:

  • 创建文件:检查文件是否存在,如果不存在则创建新文件。
  • 删除文件:删除指定的文件或目录。
java 复制代码
import java.io.File;
import java.io.IOException;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        if (!file.exists()) {
            try {
                file.createNewFile();
                System.out.println("文件已创建: " + file.getName());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("文件已存在: " + file.getName());
        }

        if (file.delete()) {
            System.out.println("文件已删除: " + file.getName());
        } else {
            System.out.println("文件删除失败");
        }
    }
}
文件读取 (FileReaderBufferedReader)

使用FileReaderBufferedReader读取文件内容。BufferedReader提供了缓冲功能,读取效率更高。

java 复制代码
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("example.txt");
             BufferedReader br = new BufferedReader(fr)) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
文件写入 (FileWriterBufferedWriter)

使用FileWriterBufferedWriter将内容写入文件。BufferedWriter提供了缓冲功能,写入效率更高。

java 复制代码
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("example.txt");
             BufferedWriter bw = new BufferedWriter(fw)) {
            bw.write("Hello, World!");
            bw.newLine();
            bw.write("This is a test file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
对象序列化和反序列化

序列化是将对象状态转换为字节流的过程,反序列化是将字节流恢复为对象的过程。

序列化:

复制代码
java 复制代码
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.Serializable;

class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        try (FileOutputStream fos = new FileOutputStream("person.ser");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {
            oos.writeObject(person);
            System.out.println("对象已序列化");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

反序列化:

复制代码
java 复制代码
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;

public class DeserializationExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("person.ser");
             ObjectInputStream ois = new ObjectInputStream(fis)) {
            Person person = (Person) ois.readObject();
            System.out.println("对象已反序列化");
            System.out.println(person);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Java文件读写和对象序列化的面试题及其解答。

面试题 1:如何检查文件是否存在?如果不存在,如何创建新文件?

解答: 可以使用File类的exists()方法来检查文件是否存在。如果文件不存在,可以使用createNewFile()方法创建新文件。

面试题 2:如何使用BufferedReader读取文件的每一行?

解答: 可以使用BufferedReaderreadLine()方法逐行读取文件内容。

面试题 3:如何使用BufferedWriter将文本写入文件并添加换行符?

解答: 可以使用BufferedWriterwrite()方法写入文本,使用newLine()方法添加换行符。

面试题 4:什么是对象序列化?如何实现对象序列化?

解答: 对象序列化是指将对象的状态转换为字节流的过程。要实现对象序列化,类必须实现Serializable接口,并使用ObjectOutputStream将对象写入文件。

面试题 5:如何实现对象的反序列化?

解答: 对象反序列化是将字节流恢复为对象的过程。可以使用ObjectInputStream从文件中读取字节流,并将其转换回原始对象。

结论

本文介绍了Java中常用的文件读写操作和对象序列化技术。通过使用FileFileReaderFileWriterBufferedReaderBufferedWriter等类,可以方便地进行文件操作。通过实现Serializable接口,可以将对象的状态保存到文件或从文件恢复。掌握这些基础知识对于处理Java中的I/O操作至关重要。

觉得有用的话可以点点赞 (*/ω\*),支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦 >人< 。

相关推荐
dundunmm几秒前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神几秒前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
波音彬要多做2 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区10 分钟前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光14 分钟前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
矛取矛求18 分钟前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生18 分钟前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it32 分钟前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
四口鲸鱼爱吃盐42 分钟前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
是娜个二叉树!1 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python