Java 输入/输出(I/O)操作(10/30)

news2024/12/28 9:03:12

目录

Java 输入/输出(I/O)操作

1. Java I/O 类体系结构

2. 文件读写操作

2.1 使用 FileInputStream 和 FileOutputStream 进行字节流读写

2.2 使用 FileReader 和 FileWriter 进行字符流读写

3. 缓冲流的使用

3.1 使用 BufferedReader 和 BufferedWriter

4. 使用 Scanner 和 PrintWriter 进行文件操作

5. 序列化与反序列化

5.1 使用 ObjectOutputStream 和 ObjectInputStream

总结与后续


Java 输入/输出(I/O)操作

在软件开发中,输入/输出(I/O) 操作是非常常见的需求,它涉及到数据的读写与传输。Java 提供了强大的 I/O 类库,使得开发者可以方便地对文件、控制台、网络流等进行读写操作。本模块将介绍 Java 中的 I/O 类体系、文件读写、缓冲流和字符流的使用,帮助你掌握如何处理数据的输入和输出。

1. Java I/O 类体系结构

Java 的 I/O 类库主要包含在 java.iojava.nio 包中,提供了一系列用于操作字节流和字符流的类。

  • 字节流:用于处理二进制数据,类名以 InputStreamOutputStream 结尾。

  • 字符流:用于处理文本数据,类名以 ReaderWriter 结尾。

类名描述
InputStream字节输入流的抽象类
OutputStream字节输出流的抽象类
FileInputStream从文件中读取字节的输入流
FileOutputStream向文件中写入字节的输出流
Reader字符输入流的抽象类
Writer字符输出流的抽象类
FileReader从文件中读取字符的输入流
FileWriter向文件中写入字符的输出流
BufferedReader带缓冲的字符输入流
BufferedWriter带缓冲的字符输出流

2. 文件读写操作

文件读写是 Java I/O 操作中最常见的应用场景之一。我们可以使用 FileInputStreamFileOutputStream 处理字节流,或者使用 FileReaderFileWriter 处理字符流。

2.1 使用 FileInputStreamFileOutputStream 进行字节流读写

示例

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt");
             FileOutputStream fos = new FileOutputStream("output.txt")) {
            int data;
            while ((data = fis.read()) != -1) {
                fos.write(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用 FileInputStreaminput.txt 中读取字节,并将它们通过 FileOutputStream 写入到 output.txt 中。

2.2 使用 FileReaderFileWriter 进行字符流读写

示例

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("input.txt");
             FileWriter fw = new FileWriter("output.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                fw.write(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用 FileReaderFileWriter 来读取和写入字符文件。这种方法适用于处理文本数据。

3. 缓冲流的使用

缓冲流(Buffered Stream)可以提高 I/O 操作的效率。缓冲流通过减少与底层系统的交互次数,显著提升了读写速度。

3.1 使用 BufferedReaderBufferedWriter

示例

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用 BufferedReader 逐行读取文件内容,并使用 BufferedWriter 将内容写入到另一个文件中。readLine() 方法每次读取一整行,newLine() 方法用于写入系统的行分隔符。

4. 使用 ScannerPrintWriter 进行文件操作

Scanner 类可以方便地从文件中读取数据,而 PrintWriter 类则用于将数据格式化输出到文件中。

示例

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ScannerPrintWriterExample {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(new File("input.txt"));
             PrintWriter writer = new PrintWriter("output.txt")) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                writer.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用 Scanner 逐行读取文件内容,并使用 PrintWriter 将内容写入到另一个文件中。ScannerPrintWriter 提供了方便的方法来处理文本数据的输入和输出。

5. 序列化与反序列化

序列化 是将对象的状态转换为字节流的过程,以便将其保存到文件或通过网络传输。反序列化 是从字节流中恢复对象的过程。

5.1 使用 ObjectOutputStreamObjectInputStream

示例

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.io.IOException;

class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    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("Alice", 30);

        // 序列化对象
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            oos.writeObject(person);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 反序列化对象
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person deserializedPerson = (Person) ois.readObject();
            System.out.println("反序列化后的对象: " + deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,Person 类实现了 Serializable 接口,以使对象可以被序列化。我们使用 ObjectOutputStream 将对象保存到文件中,并使用 ObjectInputStream 从文件中读取对象。

总结与后续

在本模块中,我们学习了 Java 中的输入/输出操作,包括文件的读写、缓冲流的使用以及对象的序列化与反序列化。掌握 I/O 操作对于处理文件和数据非常重要,是开发实际应用程序的基础技能。

在下一模块中,我们将深入探讨 Java 网络编程,学习如何通过 Java 实现客户端与服务器之间的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】

文章目录 📕Unity XR 开发架构🔍底层插件(对接硬件)🔍高层 SDK(面向应用交互层) 📕OpenXR📕XR Interaction Toolkit🔍特点🔍XRI 能够实现的交互类…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供…

使用Scrapy框架爬取博客信息

随着网络的发展,越来越多有价值的信息存储在网络上。使用爬虫技术可以从这些信息源中提取出有用的数据。本文将介绍如何使用Python中的Scrapy框架来爬取博客站点上的文章标题、作者以及阅读数,并将其保存到JSON文件中。 一、项目背景 Scrapy是一个快速…

Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览

1.安装依赖 npm install pdfjs-dist2.5.207 --savenpm install vue-pdf-signature4.2.7 --save2.在.vue文件中 script 部分引入 <script> import * as PDFJS from pdfjs-dist PDFJS.GlobalWorkerOptions.workerSrc require(pdfjs-dist/build/pdf.worker.js);//解决pdf…

A4-C四驱高防变电站巡检机器人

在电力行业数字化、智能化转型进程中&#xff0c;搭载多模态成像传感器的变电站巡检机器人、视频监控设备逐渐取代传统人工&#xff0c;成为变电设备状态监测的主要工具。变电站巡检机器人具有全天候、非接触式、多参量测量等特点&#xff0c;结合内置人工智能算法完成仪表识别…

““ 引用类型应用举例

#include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用se…

Git 本地操作(2)

会以下操作就可以完成本地的版本控制了&#xff0c;就不需要再复制文件每次改一个东西就复制整个工程保存下来啦&#xff01; 建议先看上一篇文章噢 &#xff01;&#xff01;&#xff01; 一、新建项目git本地操作 1、初始化仓库 创建一个 project 文件夹&#xff0c;将需…

室内障碍物射线追踪算法matlab模拟仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 增加发射点 加入室内墙壁&#xff1a; 同时增加发射点和室内墙壁&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分…

视频文案素材获取渠道分享

做视频时为文案发愁&#xff1f;别担心&#xff01;今天为大家推荐几个实用的视频文案素材网站&#xff0c;让你灵感爆棚&#xff0c;轻松创作文案。 蛙学网 首先要推荐的是蛙学网。作为专业短视频素材库&#xff0c;不仅有修牛蹄、解压视频等热门素材&#xff0c;还为短视频创…

【LLaMA-Factory】【Windows】:在windows操作系统配置大模型微调框架LLaMA-Factory

目录 序言 1 代码下载 2 模型下载 一、模型的作用 二、为何需要下拉模型 3 conda 环境安装 一、环境隔离与管理 二、简化安装与配置 三、提升性能与兼容性 4 安装依赖包 5 安装cuda 121版本 6 安装pytorch 一、PyTorch与LLaMA-Factory的兼容性 二、PyTorch的GPU加…

深度学习基础(2024-10-30更新到tensor相关)

1. 名词解释 FFN FFN &#xff1a; Feedforward Neural Network&#xff0c;前馈神经网络馈神经网络是一种基本的神经网络架构&#xff0c;也称为多层感知器&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;FFN 一般主要是包括多个全连接层(FC)的网络&#xff…

逆变器前级倍压方案【工作日志】

EG3525S: 价格便宜&#xff0c;能买到&#xff0c;资料丰富&#xff0c;成熟&#xff0c;有人用 C2987456_AC-DC控制器和稳压器_EG3525S_规格书_WJ93166.PDF 发现一个好玩的&#xff0c;这个芯片还可以做大功率的降压控制使用&#xff1a; EG3525S推挽半桥PWM控制芯片数…

企业数字化转型该如何衡量?转型的好不好,主要看哪些方面?

​大家发现一个现象没&#xff1f;就是明明可以简单几句话说清楚的事&#xff0c;有些人就喜欢长篇大论&#xff0c;写个几千上万字&#xff0c;甚至从概念、定义开始聊&#xff0c;讲了半天都还没讲到重点。就给人一种强行“凑字”的感觉... 其实这个问题很简单的&#xff0c;…

html生成图片方案总结

动态图片生成是我们日常开发中经常遇到的需求&#xff0c;比如宣传海报生成&#xff0c;电商商品图动态生成等&#xff0c;本文总结出三种常见的 HTML 生成图片的方案。 一、html2canvas html2canvas库能够将 HTML 元素渲染为 Canvas&#xff0c;然后将其转换为图片。它的优点…

瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了

本文介绍瑞芯微RK3566/RK3568在Android11系统下&#xff0c;默认屏蔽导航栏/状态栏方法&#xff0c;使用触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;Laval官方社区主荐&#xff0c;已适配全新OpenHarmony5.0 R…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan之网页版

Shodan网页版概述 Shodan是一个专门用于搜索互联网上各种设备和服务的搜索引擎&#xff0c;它能够发现并列出暴露在互联网上的设备&#xff0c;如服务器、路由器、交换机、网络摄像头等。与传统的搜索引擎不同&#xff0c;Shodan并不为网页内容建立索引&#xff0c;而是寻找开放…

第二十一章 Vue组件通信之prop校验及单向数据流

目录 一、什么是Prop 1.1. Prop传递数据代码示例图 1.2. 演示代码App.vue 1.3. 演示代码UserInfo.vue 二、props 校验 2.1. props校验简单写法 2.1.1. 演示代码App.vue 2.1.2. 演示代码BaseProgress.vue 2.2. props校验完整写法 2.2.1. 演示代码BaseProgress.vue 2.…

哈工大《理论力学》第九版课后答案解析及笔记PDF

第九版序 哈工大《理论力学》初版于1961年&#xff0c;先后再版8次&#xff0c;曾获得首届国家优秀教材奖和国家级教学成果奖。本书第8版为“十二五”普通高等教育本科国家级规划教材&#xff0c;并于2021年被国家教材委员会评为首届全国教材建设奖全国优秀教材一等奖。 本书…

CloudSat数据产品数据下载与处理 (matlab)

CloudSat数据下载 这个数据我之前和CALIPSO弄混了&#xff0c;后来发现它们虽然是同一个火箭上去&#xff0c;但是数据产品却在不同的平台下&#xff0c;CloudSat的数据更加关注云的特性&#xff0c;包括云覆盖、云水当量、云分类数据。 数据网址在&#xff1a;CloudSat网址 …

Linux初阶——线程(Part2):互斥同步问题

一、互斥锁 1、CPU 运算过程 执行完整个语句后&#xff0c;才会把数据写入内存&#xff1b;如果执行时被中断&#xff0c;那么数据和上下文就会保存到线程的 TCB&#xff0c;但数据并不会被写入内存。 1.1. 当 CPU 执行完整个语句时 CPU 最终执行完整个语句的过程 就用上图举…