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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/779148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node的下载、安装、配置和使用(node.js下载安装和配置、npm命令汇总、cnpm的使用)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 愿将腰下剑,直为斩楼兰。 ——《塞下曲》 文章目录 一、node.js的下载、安装和配置1. node.js下…

Shell编程类-网站检测

Shell编程类-网站检测 面试题参考答法 a(1 2 3 4) echo ${a[0]} echo ${a[*]}这里声明一个数值&#xff0c;并选择逐个调用输出还是全部输出 curl -w %{http_code} urL/IPADDR常用-w选项去判断网站的状态&#xff0c;因为不加选择访问到的网站可能出现乱码无法判断是否网站down…

从零开始读RocketMq源码(一)生产者启动

目录 前言 获取源码 总概论 生产者实例 源码 A-01:设置生产者组名称 A-02:生产者服务启动 B-01&#xff1a;初始化状态 B-02&#xff1a;该方法再次对生产者组名称进行校验 B-03&#xff1a;判断是否为默认生产者组名称 B-04: 该方法是为了实例化MQClientInstance对…

零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频

文章目录 一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用单…

转发服务器实验

首先先克隆一个虚拟机并完成ip地址的修改 nmcli connection modify ens160 ipv4.addresses 192.168.209.128/24 nmcli connection modify ens160 ipv4.method manual nmcli connection modify ens160 connection.autoconnect yes nmcli connection up ens160 nmcli connection…

计算机网络浅谈—什么是 OSI 模型?

开放系统通信&#xff08;OSI&#xff09;模型是一个代表网络通信工作方式的概念模型。 思维导图 什么是 OSI 模型&#xff1f; 开放系统互连 (OSI) 模型是由国际标准化组织创建的概念模型&#xff0c;支持各种通信系统使用标准协议进行通信。简单而言&#xff0c;OSI 为保证…

读书到底有什么意义?从笨小孩到名人的逆袭之路

点击上方△腾阳 关注 作者 l 腾阳 转载请联系授权 读书到底有什么意义&#xff1f; 有一个鸟语花香的农场里&#xff0c;住着老农夫和他的小孙子。 老农夫经常在清晨会坐在窗边&#xff0c;捧着厚厚的《圣经》&#xff0c;沉浸在知识的海洋里。 小孙子问他&#xff1a;…

【Linux】文件系统6——理解文件操作

目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致&#xff08;Inconsistent&#xff09;状态 2.2.日志式文件系统&#xff08;Journaling filesystem&#xff09; 3.Linux文件系统的运行 4、文件的删…

Selenium的自动化测试技巧有多少?【建议收藏】

Selenium是一个用于自动化Web应用程序测试的工具。它提供了一组API&#xff0c;允许用户与Web浏览器进行交互&#xff0c;来执行各种自动化测试任务。本文将从零开始&#xff0c;详细介绍Selenium的自动化测试技巧。 第一步&#xff1a;安装Selenium 首先&#xff0c;您需要安…

【鸿蒙学习笔记】Stage模型工程目录

官方文档&#xff1a;应用配置文件概述&#xff08;Stage模型&#xff09; 目录标题 FA模型和Stage模型工程级目录模块级目录app.json5module.json5程序执行流程程序基本结构开发调试与发布流程 FA模型和Stage模型 工程级目录 模块级目录 app.json5 官方文档&#xff1a;app.j…

WAIC:生成式 AI 时代的到来,高通创新未来!

目录 01 在终端侧算力上&#xff0c;动作最快的就是高通 02 模型优化&#xff0c;完成最后一块拼图 在WAIC上&#xff0c;高通展示的生成式AI创新让我们看到了未来的曙光。 生成式 AI 的爆发带来了意想不到的产业格局变化&#xff0c;其速度之快令人惊叹。 仅在一个月前&…

android之蓝牙遥控器新增键值

文章目录 简述连接蓝牙代码流程总结简述 使用android 10平台来适配蓝牙遥控器新增的键值 连接蓝牙 当使用遥控器与蓝牙进行配对成功后,就可以通过getevent获取蓝牙打印的信息,如下所示 其中000700a0是发送过来的协议(0007)和码值(00a0)的组合。0xfa是驱动定义好的值,如果…

AI智能歌曲创作源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 本AI智能歌曲创作源码系统集成了深度学习、自然语言处理和音乐理论&#xff0c;旨在通过用户输入的关键词、情感色彩或音乐片段&#xff0c;自动生成具有创意且风格多样的音乐作品。系统核心由两大部分构成&#xff1a;前端用户界面与后端音乐生成引擎。前端负责接收…

什么是 VueQuill(前端的富文本编辑器)?

什么是 VueQuill&#xff1f; 1. 简介 VueQuill 是 Vue.js 的一个富文本编辑器插件&#xff0c;它基于 Quill 编辑器构建&#xff0c;提供了简洁且功能强大的富文本编辑功能。Quill 是一个现代化的富文本编辑器&#xff0c;提供丰富的文本编辑能力&#xff0c;支持多种格式和…

【学习笔记】程序设计竞赛

程序设计竞赛 文章目录 程序设计竞赛0x00 基本操作指南0x01 算法分析0x02 STL和基本数据结构栈队列集合map 0x03 排序插入排序归并排序&#xff08;Merge Sort)快速排序 0x04 搜索技术BFSDFS回溯与剪枝 深度迭代ID A*A star双向广搜 0x05 递推方程0x06 高级数据结构并查集二叉树…

【强化学习的数学原理】课程笔记--3(蒙特卡洛方法)

目录 蒙特卡洛方法MC Basic算法sparse reward MC Greedy 算法样本使用效率MC ϵ \epsilon ϵ-Greedy 算法一些例子 蒙特卡洛方法 第二节 推导贝尔曼最优公式中的&#xff1a; q π k ( s , a ) ∑ r P ( r ∣ s , a ) r γ ∑ s ′ P ( s ′ ∣ s , a ) v π k ( s ′ ) q…

CMS Made Simple v2.2.15 远程命令执行漏洞(CVE-2022-23906)

前言 CVE-2022-23906 是一个远程命令执行&#xff08;RCE&#xff09;漏洞&#xff0c;存在于 CMS Made Simple v2.2.15 中。该漏洞通过上传头像功能进行利用&#xff0c;攻击者可以上传一个经过特殊构造的图片文件来触发漏洞。 漏洞详情 CMS Made Simple v2.2.15 中的头像上…

NAS 必备导航页 Homepage 外观简约但功能丰富

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 NAS 上的应用部署多了之后,不同的服务对应的端口很难记住,在内网中使用,一般也不会绑定域名。 此时就需要有一个导航页将 NAS 上部署的所有服务都罗列出来,方便我们直接点击访问对应的服务。 今天给大家介绍的…

电商利器——淘宝商品月销量API接口解析

在电商时代&#xff0c;数据就是金钱。对于淘宝商家而言&#xff0c;掌握商品的销量数据无异于掌握了市场的脉搏。如今&#xff0c;淘宝商品月销量API接口的出现&#xff0c;联讯数据让商家如虎添翼&#xff0c;能够更加精准地把握市场动态&#xff0c;优化商品策略。 淘宝商…

强技能 展风采 促提升——北京市大兴区餐饮行业职工技能竞赛精彩呈现

6月19日&#xff0c;由大兴区总工会、区商务局、青云店镇人民政府联合主办&#xff0c;区服务工会、区餐饮行业协会承办的“传承中国技艺&#xff0c;打造新一代餐饮工匠”2024年大兴区餐饮行业职工职业技能竞赛决赛在北京华联创新学习中心隆重开幕。区总工会副主席郝泽宏&…