首页 > 编程语言 >【Java中的IO详解】

【Java中的IO详解】

时间:2025-01-04 22:32:23浏览次数:8  
标签:Java 字节 io java 详解 IOException IO import public

Java中的IO详解

Java的IO(输入/输出)系统是一个复杂且功能丰富的库,它提供了多种方式来处理数据流。

概念

  • 流 (Stream): 流是用于表示一系列有序的数据元素的抽象。在Java中,所有的I/O操作都是通过流完成的。
  • 字节流 (Byte Stream): 以字节为单位进行读写,适用于二进制数据。
  • 字符流 (Character Stream): 以字符为单位进行读写,适用于文本数据,通常处理Unicode字符。
  • 缓冲 (Buffering): 使用缓冲区可以减少磁盘或网络I/O次数,提高性能。
  • 非阻塞 I/O (Non-blocking I/O): 在NIO中引入,允许程序在等待I/O操作时继续执行其他任务。
  • 通道 (Channel): NIO中的核心组件之一,用于直接与文件或网络套接字进行高效的数据传输。
  • 选择器 (Selector): NIO中的多路复用器,用于监控多个通道的I/O事件。

类的概述

字节流
  • InputStreamOutputStream: 抽象基类,定义了所有字节流的基本方法。
  • FileInputStreamFileOutputStream: 用于读写文件的字节流。
  • ByteArrayInputStreamByteArrayOutputStream: 从或向字节数组读写字节。
  • BufferedInputStreamBufferedOutputStream: 带有缓冲功能的字节流。
  • DataInputStreamDataOutputStream: 支持基本数据类型读写的字节流。
  • ObjectInputStreamObjectOutputStream: 用于序列化和反序列化对象。
字符流
  • ReaderWriter: 抽象基类,定义了所有字符流的基本方法。
  • FileReaderFileWriter: 用于读写文件的字符流。
  • CharArrayReaderCharArrayWriter: 从或向字符数组读写字符。
  • BufferedReaderBufferedWriter: 带有缓冲功能的字符流,支持按行读写。
  • InputStreamReaderOutputStreamWriter: 作为字节流和字符流之间的桥梁,进行编码转换。
  • PrintWriter: 提供格式化输出的方法,如printf
NIO
  • FileChannel: 文件的通道实现,支持直接内存访问。
  • SocketChannel, ServerSocketChannel, DatagramChannel: 网络通信的通道实现。
  • ByteBuffer: 用于存储和操作字节数据的缓冲区。
  • Selector: 用于管理多个通道的I/O事件。
NIO.2
  • PathPaths: 表示文件路径,并提供各种路径操作方法。
  • Files: 包含大量静态方法,用于执行常见的文件操作。
  • WatchService: 用于监视文件系统的更改。

使用场景

  • 文件操作:
    • 读取和写入文本或二进制文件。
    • 复制文件或目录。
    • 遍历目录树。
  • 网络编程:
    • 创建客户端或服务器端应用程序。
    • 实现高并发的网络服务。
  • 序列化:
    • 将对象保存到文件或在网络上传输。
    • 从文件或网络加载对象。
  • 日志记录:
    • 写入日志信息到文件。
    • 读取日志文件进行分析。

常见使用示例

1. 读取文本文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadTextFile {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2. 写入文本文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class WriteTextFile {
    public static void main(String[] args) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            bw.write("Hello, World!");
            bw.newLine();
            bw.write("This is a test.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3. 使用NIO复制文件
import java.nio.file.*;
import java.io.IOException;

public class CopyFileNIO {
    public static void main(String[] args) {
        Path source = Paths.get("source.txt");
        Path target = Paths.get("target.txt");

        try {
            Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4. 使用NIO.2遍历目录
import java.nio.file.*;
import java.io.IOException;

public class TraverseDirectory {
    public static void main(String[] args) {
        Path dir = Paths.get(".");

        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
            for (Path entry : stream) {
                System.out.println(entry.getFileName());
            }
        } catch (IOException | DirectoryIteratorException x) {
            System.err.println(x);
        }
    }
}

这些例子展示了如何使用Java IO库的不同部分来完成实际的任务。根据您的具体需求,您可以选择最适合的类和方法来构建您的应用。

标签:Java,字节,io,java,详解,IOException,IO,import,public
From: https://blog.csdn.net/qq_44734705/article/details/144903846

相关文章

  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年Fine-Grained Channel Attention(FCAttenti
    1.FCAttention介绍1.1 摘要:近年来,无监督算法在图像去雾方面取得了显著的效果。然而,CycleGAN框架会因数据分布不一致而导致生成器学习混乱,而DisentGAN框架对生成的图像缺乏有效约束,导致图像内容细节丢失和颜色失真。此外,Squeeze和Excitation通道仅利用完全连通的层来获取全......
  • Java实现验证码识别
    一、准备工作安装JDK并配置环境变量。安装Eclipse或IntelliJIDEA作为开发工具。安装SeleniumWebDriver库和Tesseract-OCR库。二、打开网站并设置浏览器窗口首先,打开浏览器并将窗口最大化,以确保每次截取的图片都是相同的大小:javaimportorg.openqa.selenium.WebDriver;im......
  • 2025年Stable Diffusion安装教程(超详细)
    StableDiffusion的安装部署其实并不困难,只需简单点击几下,几分钟就能安装好,不管是windows还是苹果mac电脑,关于StableDiffusion的各种安装方式,这片文章一一来给大家讲明白。(所有安装资料都给大家整理好啦,后台发送学习获取或者看下图备注)StableDiffusionWebUIStableDiffusio......
  • 【详解】Metasploit渗透MSSQL
    目录Metasploit渗透MSSQL环境准备工具安装目标环境渗透步骤1.扫描目标2.加载MSSQL模块3.配置模块4.设置凭证字典5.运行模块6.分析结果7.利用漏洞8.后渗透测试安全建议结论前提条件示例代码示例脚本解释注意事项结论常见的MSSQL渗透模块使用步骤......
  • 【详解】Spring整合Redis
    目录Spring整合Redis1.环境准备1.1技术栈1.2工具2.添加依赖3.配置Redis4.创建Redis配置类5.使用RedisTemplate6.测试7.总结1.添加依赖2.配置Redis连接3.创建Redis配置类4.创建服务类5.创建控制器6.启动应用7.测试API1.添加依赖2.配置Redi......
  • java基于Spark的温布尔登特色赛赛事数据分析预测及算法实现
    目录系统实现截图开发核心技术介绍技术栈核心代码部分展示操作手册视频演示/源码获取系统实现截图开发核心技术介绍springboot+Element-UI+vue本系统采用MVVM模式,开发框架使用SpringBoot框架,开发工具使用IDEA,VisualStudioCode,Web服务器使用Tomcat,数据库服......
  • Stable Diffusion秋叶WebUI V4.8安装包下载
    这款整合包可以一键在本地部署StableDiffusion!!适用于零基础想要使用AI绘画的小伙伴~秋叶整合安装包安装教程如果你的电脑时第一次安装,需要先下载启动器运行依赖,安装依赖后,再解压sd-webui-aki-v4文件夹。第一个文件夹里面是模型,根据需求选择性下载。解压sd-webui-a......
  • Stable-Diffusion小知识:图生图-局部重绘功能
    文章使用的AI绘画SD整合包、各种模型插件、提示词、AI人工智能学习资料都已经打包好放在网盘中了,有需要的小伙伴文末扫码自行获取。当我们使用Stable-Diffusion生成图片后,若是想要修改或新增某些细节,如果使用文生图或图生图去抽卡生成图片,那么能生成出满意图片的概率就比较......
  • Read-only file system detection thread was hung. Cell was power cycled to stop t
    1、故障描述今天下午,cell10存储节点莫名其妙地自动重启了。虽然数据库没有受到影响,但仍然需要弄清楚重启的原因。以下记录整个故障的分析过程。2、故障分析2.1分析操作系统日志。故障前后的操作系统日志摘要如下所示。Jan 409:25:29dm01celadm10auditd[12291]:Audit......
  • 跟着问题学3.3——Faster R-CNN详解及代码实战(1)
    FastR-CNN的不足选取区域使用的算法是固定的,不参与学习选取区域的算法本身消耗比较高(搜索选择法)选取区域的算法选出来的区域大部分都是重合的,并且只有很小一部分包含我们想要识别的对象区域范围的精度比较低(即使经过调整)判断分类有时只能使用部分包含对象的区域(例如......