Java中I/O输入输出的深入讲解

yizhihongxing

Java中I/O输入输出的深入讲解

什么是I/O

I/O(Input/Output)指的是数据的输入和输出,是计算机与程序外部世界进行信息交互的方式之一。在Java中,I/O被视为一种Java API,提供了许多与文件、网络和其他I/O设备进行数据输入和输出的类和方法。

I/O的主要类型

字节流

字节流(Byte Stream)以字节为单位进行操作,可以读写任何类型的数据。在 Java 中主要是由 InputStream 和 OutputStream 两个抽象类派生出来的。

以读文件为例,以下为读文件的步骤:

  1. 打开文件;

FileInputStream fis = new FileInputStream(fileName);

  1. 开始读取数据;

int data = fis.read(); //读取文件字节,并转换成整数
while (data != -1) {
data = fis.read();
}

  1. 关闭文件。

fis.close();

字符流

字符流(Character Stream)以字符为单位进行操作,仅支持读取和写入纯文本信息。在 Java 中主要是由 Reader 和 Writer 两个抽象类派生出来的。

以读文件为例,以下为读文件的步骤:

  1. 打开文件,创建 Reader 对象;

FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);

  1. 开始读取数据;

String line = br.readLine();
while (line != null) {
line = br.readLine();
}

  1. 关闭文件。

br.close();
fr.close();

缓冲流

缓冲流(Buffer Stream)是为了增强字节流和字符流的效率而设计的。缓冲流通过在内存中创建一个缓冲区,使得数据读写时,先让数据暂时存储在缓冲区中,而不是通过物理设备(硬盘、网络等)直接读写。常用的缓冲流有 BufferedInputStream 和 BufferedOutputStream(字节流缓冲流)以及 BufferedReader 和 BufferedWriter(字符流缓冲流)。

以读文件为例,以下为读文件的步骤:

  1. 打开文件,创建 Input Stream 和 Buffered Input Stream 对象;

FileInputStream fis = new FileInputStream(fileName);
BufferedInputStream bis = new BufferedInputStream(fis);

  1. 开始读取数据;

int data = bis.read();
while (data != -1) {
data = bis.read();
}

  1. 关闭文件。

bis.close();
fis.close();

转换流

转换流(Conversion Stream)是字符流和字节流之间的桥梁,支持不同的字符集之间进行转换。常用的转换流是 InputStreamReader 和 OutputStreamWriter。

以读文件为例,以下为读文件的步骤:

  1. 打开文件,创建 InputStream 和 InputStreamReader 对象;

FileInputStream fis = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);

  1. 开始读取数据;

int data = isr.read();
while (data != -1) {
data = isr.read();
}

  1. 关闭文件。

isr.close();
fis.close();

I/O的常用类和方法

File

File 类代表文件或目录(文件夹),常用的方法有:

  • File file = new File(fileName):创建 File 对象;
  • file.exists():判断文件或目录是否存在;
  • file.getAbsolutePath():获得文件或目录的绝对路径;
  • file.isDirectory()file.isFile():判断是否是目录或文件;
  • file.mkdirs():递归创建目录;
  • file.delete():删除文件或目录。

FileInputStream/FileOutputStream

FileInputStream 和 FileOutputStream 类分别用于读取和写入文件,常用的方法有:

  • FileInputStream fis = new FileInputStream(fileName):创建 FileInputStream 对象;
  • FileOutputStream fos = new FileOutputStream(fileName):创建 FileOutputStream 对象;
  • fis.read()fos.write(byte[]):读取或写入字节数据;
  • fis.close()fos.close():关闭流。

FileReader/FileWriter

FileReader 和 FileWriter 类分别用于读取和写入文件中的字符数据,常用的方法有:

  • FileReader fr = new FileReader(fileName):创建 FileReader 对象;
  • FileWriter fw = new FileWriter(fileName):创建 FileWriter 对象;
  • fr.read()fw.write(char[]):读取或写入字符数据;
  • fr.close()fw.close():关闭流。

BufferedReader/BufferedWriter

BufferedReader 和 BufferedWriter 类分别用于对字符流进行缓冲,常用的方法有:

  • BufferedReader br = new BufferedReader(fr):创建 BufferedReader 对象;
  • BufferedWriter bw = new BufferedWriter(fw):创建 BufferedWriter 对象;
  • br.readLine()bw.write(String):读取或写入一行字符数据;
  • br.close()bw.close():关闭缓冲流。

ByteArrayInputStream/ByteArrayOutputStream

ByteArrayInputStream 和 ByteArrayOutputStream 类分别用于读取和写入字节数组,常用的方法有:

  • ByteArrayInputStream bis = new ByteArrayInputStream(byteArray):创建 ByteArrayInputStream 对象;
  • ByteArrayOutputStream bos = new ByteArrayOutputStream():创建 ByteArrayOutputStream 对象;
  • bis.read(byte[])bos.write(byte[]):读取或写入字节数据;
  • bis.close()bos.close():关闭流。

示例

示例1:读取文件

以下示例是通过 BufferedReader 和 FileReader 读取一个文件并输出文件内容:

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

public class ReadFile {
    public static void main(String[] args) {
        String fileName = "C:/temp/test.txt";
        try (FileReader fr = new FileReader(fileName);
             BufferedReader br = new BufferedReader(fr)) {
            String line = br.readLine();
            while (line != null) {
                System.out.println(line);
                line = br.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例2:写入文件

以下示例是通过 BufferedWriter 和 FileWriter 向文件中写入一行字符串:

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

public class WriteFile {
    public static void main(String[] args) {
        String fileName = "C:/temp/test.txt";
        try (FileWriter fw = new FileWriter(fileName, true);
             BufferedWriter bw = new BufferedWriter(fw)) {
            bw.write("Hello, World!\n");
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上示例中 <String> 为省略的泛型参数,可以根据具体情况进行替换。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中I/O输入输出的深入讲解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Serv-U 8.0 服务器中文乱码问题的解决

    这里是 Serv-U 8.0 服务器中文乱码问题的解决攻略。 问题描述 在 Serv-U 8.0 服务器中,当有中文字符传输时,会出现乱码问题,影响文件传输的正常使用。 解决方案 方案一:修改 Serv-U 的默认编码格式 Serv-U 8.0 服务器默认采用 ISO-8859-1 编码格式,而中文字符需要使用 UTF-8 编码格式才能正确显示。因此,我们需…

    Java 2023年5月20日
    00
  • Java中数组与集合的相互转换实现解析

    Java中数组与集合的相互转换实现解析 在Java中,数组和集合都是常用的数据结构。在实际开发中,可能会遇到数组和集合之间的转换操作。本文将详细讲解Java中数组与集合的相互转换实现方法。 数组转换为集合 数组可以通过Arrays类中的asList()方法转换为集合。asList()方法可以接收一个数组作为参数,返回与该数组对应的集合。 示例: String…

    Java 2023年5月26日
    00
  • Java 数据结构与算法系列精讲之红黑树

    红黑树 简介 红黑树是一种自平衡二叉搜索树,它是被广泛使用的一种数据结构,在计算机领域中用于实现高效的查找、插入和删除操作。其名字的由来是因为每个节点都有一个被标记为红色或黑色的属性,又因为它是二叉搜索树,因此在插入、删除操作后,它会自动调整以保持平衡状态。 红黑树的定义 红黑树最重要的两个属性是: 每个节点或者是黑色,或者是红色。 根节点是黑色。 每个叶节…

    Java 2023年5月26日
    00
  • Java十道入门易踩坑题分析后篇

    Java十道入门易踩坑题分析后篇 1. 理解Java中的基本数据类型 在Java中,基本数据类型包括整型、字符型、布尔型、浮点型和字节型。其中,整型包括byte、short、int和long四种类型;浮点型包括float和double两种类型;字符型只有char一种类型;布尔型只有boolean一种类型。 在使用基本数据类型时需要注意以下几点:- 整型的范围…

    Java 2023年5月23日
    00
  • 在Ruby on Rails中使用AJAX的教程

    下面是“在Ruby on Rails中使用AJAX的教程”的完整攻略: 1.前言 在现代Web开发中,AJAX 技术已经成为了非常重要的一部分,能够为用户带来更好的用户体验。Ruby on Rails 作为一款现代的 Web 框架,自然也支持对 AJAX 的良好支持。 本文将介绍在 Ruby on Rails 中使用 AJAX 的相关技巧,包括控制器响应的格…

    Java 2023年6月15日
    00
  • JAVA 十六进制与字符串的转换

    Java 中可以通过多种方式实现十六进制和字符串之间的转化。本文将介绍两种主要的方法:使用内置类库和字节数组转换。 使用内置类库实现 Java 内置的 Integer、Long 和 Short 等类库提供了十六进制和字符串之间的转化方法。下面是一个示例: // 十六进制转字符串 int hexVal = 0x1F; String hexStr = Integ…

    Java 2023年5月27日
    00
  • 在IDEA中maven配置MyBatis的流程详解

    下面是关于在IDEA中maven配置MyBatis的流程详解的攻略: 步骤一: 创建Maven项目并添加依赖 打开IDEA,选择“Create New Project”,选择“Maven”类型的项目 在弹出的窗口中,填写GroupId、ArtifactId、Version信息 例如:GroupId:com.example,ArtifactId:mybatis…

    Java 2023年5月20日
    00
  • JPA 使用criteria简单查询工具类方式

    JPA 使用 Criteria 简单查询工具类方式,具体步骤如下: 什么是Criteria查询 通常的JPQL查询必须要写类似于SELECT * FROM book WHERE id = 1 这样的SQL语句,书写SQL语句的时侯需要时刻注意SQL语句的拼写,如此繁琐而且费时费力,如果采用Criteria查询,则可以省去SQL语句的书写,Criteria查询…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部