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

目录

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

文件读写

文件类 (File)

文件读取 (FileReader 和 BufferedReader)

文件写入 (FileWriter 和 BufferedWriter)

对象序列化

序列化 (Serializable)

反序列化 (Serializable)

示例说明

文件类 (File)

文件读取 (FileReader 和 BufferedReader)

文件写入 (FileWriter 和 BufferedWriter)

对象序列化和反序列化

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

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

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

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

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

面试题 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类用于表示文件和目录。以下是一些常见操作:

  • 创建文件:检查文件是否存在,如果不存在则创建新文件。
  • 删除文件:删除指定的文件或目录。
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提供了缓冲功能,读取效率更高。

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提供了缓冲功能,写入效率更高。

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();
        }
    }
}

对象序列化和反序列化

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

序列化:

 
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();
        }
    }
}

反序列化:

 
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操作至关重要。

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值