JAVA IO API使用详解

yizhihongxing

Java IO API使用详解

概述

Java IO API是用于读写数据的标准API。Java IO库是一个基于流的库,主要利用了Java中的抽象类和接口来完成对文件的读写操作。

在Java IO库中,主要包括以下三种抽象源:

  • 字节流
  • 字符流
  • 以及文件读写流

字节流

字节流是Java IO库中最基本的流,它支持对字节的输入和输出两种操作。

InputStream

InputStream是所有字节输入流的抽象基类。它包含许多方法,如:

int read() throws IOException
int read(byte[] b) throws IOException
int read(byte[] b, int off, int len) throws IOException
void close() throws IOException

其中,第一个read()方法用于读取单个字节。第二个read()方法用于读取多个字节,并将其存储在给定的字节数组中。第三个read()方法与第二个类似,但它允许你选择从数组的哪个位置开始读取,以及读取的字节数。close()方法用于关闭流并释放其相关资源。

下面是一个从文件中读取字节并将其写入到标准输出流的示例:

try (FileInputStream inputStream = new FileInputStream("example.txt")) {
    int content;
    while ((content = inputStream.read()) != -1) {
        System.out.print((char) content);
    }
} catch (IOException e) {
    e.printStackTrace();
}

OutputStream

OutputStream是所有字节输出流的抽象基类。它包含许多方法,如:

void write(int b) throws IOException
void write(byte[] b) throws IOException
void write(byte[] b, int off, int len) throws IOException
void flush() throws IOException
void close() throws IOException

其中,第一个write()方法用于写入单个字节。第二个write()方法用于写入整个字节数组。第三个write()方法与第二个类似,但它允许您从数组的给定位置开始写入。flush()方法用于清空缓冲区并将缓冲数据写入底层流中。close()方法用于关闭流并释放其相关资源。

下面是将字节写入文件的示例:

try (FileOutputStream outputStream = new FileOutputStream("example.txt")) {
    String message = "Hello, world!";
    byte[] content = message.getBytes();
    outputStream.write(content);
} catch (IOException e) {
    e.printStackTrace();
}

字符流

字符流用于在字符级别上读取和写入数据。与字节流不同,字符流处理Unicode字符,特别是在国际化方面非常有用。

Reader

Reader是所有字符输入流的抽象基类。它包含许多方法,如:

int read() throws IOException
int read(char[] cbuf) throws IOException
int read(char[] cbuf, int off, int len) throws IOException
void close() throws IOException

其中,第一个read()方法用于读取单个字符。第二个read()方法用于读取多个字符,并将其存储在给定的字符数组中。第三个read()方法与第二个类似,但它允许您选择从数组的哪个位置开始读取,以及读取的字符数。close()方法用于关闭流并释放其相关资源。

下面是从文件中读取字符并将其写入到标准输出流的示例:

try (FileReader fileReader = new FileReader("example.txt")) {
    int content;
    while ((content = fileReader.read()) != -1) {
        System.out.print((char) content);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Writer

Writer是所有字符输出流的抽象基类。它包含许多方法,如:

void write(int c) throws IOException
void write(char[] cbuf) throws IOException
void write(char[] cbuf, int off, int len) throws IOException
void write(String str) throws IOException
void write(String str, int off, int len) throws IOException
void flush() throws IOException
void close() throws IOException

其中,第一个write()方法用于写入单个字符。第二个write()方法用于写入整个字符数组。第三个write()方法与第二个类似,但它允许您从数组的给定位置开始写入。第四个write()方法用于写入字符串。第五个write()方法与第四个类似,但它允许您从字符串的给定位置开始写入并写入给定的字符数。flush()方法用于清空缓冲区并将缓冲数据写入底层流中。close()方法用于关闭流并释放其相关资源。

下面是将字符写入文件的示例:

try (FileWriter fileWriter = new FileWriter("example.txt")) {
    String message = "Hello, world!";
    fileWriter.write(message);
} catch (IOException e) {
    e.printStackTrace();
}

文件读写流

文件读写流是Java IO库中用于读写文件的流。

FileInputStream

FileInputStream用于从文件系统中的文件读取数据。它继承自InputStream类并实现了所有其方法。它还提供了一些自己的方法,如:

FileChannel getChannel()
FileDescriptor getFD()
int available() throws IOException
long skip(long n) throws IOException

其中,getChannel()方法用于获取与该流关联的文件通道。getFD()方法用于获取与此流关联的文件描述符。available()方法用于返回此流中可供读取的字节数。skip()方法用于跳过指定字节数并返回所跳过的字节数。

下面是从文件中读取字节并将其写入到标准输出流的示例:

try (FileInputStream inputStream = new FileInputStream("example.txt")) {
    byte[] content = new byte[inputStream.available()];
    inputStream.read(content);
    String message = new String(content);
    System.out.println(message);
} catch (IOException e) {
    e.printStackTrace();
}

FileOutputStream

FileOutputStream用于将数据写入文件系统中的文件。它继承自OutputStream类并实现了所有其方法。它还提供了一些自己的方法,如:

FileChannel getChannel()
FileDescriptor getFD()

其中,getChannel()方法用于获取与该流关联的文件通道。getFD()方法用于获取与此流关联的文件描述符。

下面是将字节写入文件的示例:

try (FileOutputStream outputStream = new FileOutputStream("example.txt")) {
    String message = "Hello, world!";
    byte[] content = message.getBytes();
    outputStream.write(content);
} catch (IOException e) {
    e.printStackTrace();
}

结论

这篇文章涵盖了Java IO API的基本知识。它包括字节流、字符流以及文件读写流。这只是一个简短的介绍,你可以在Java官方文档中找到更完整的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA IO API使用详解 - Python技术站

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

相关文章

  • 在RedHat系统上安装JDK与Tomcat的步骤

    将在RedHat系统上安装JDK和Tomcat的步骤分为以下几个步骤: 下载JDK并安装 访问Oracle官网的下载页面:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html,选择对应的版本并下载JDK的安装文件。 将下载后的文件上传到RedHat系统中合适的文件夹中,如/o…

    Java 2023年5月19日
    00
  • spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决

    下面是关于“spring无法引入注解及import org.springframework.web.bind.annotation.*报错的解决”的完整攻略。 问题描述 当我们在Spring项目中引入注解或使用 org.springframework.web.bind.annotation.*包时,可能会出现以下问题:1. 编译时无法引入注解;2. 编译时报…

    Java 2023年5月19日
    00
  • 详解美团实现搜索关键词自动匹配功能的方法

    以下是详解美团实现搜索关键词自动匹配功能的方法的完整攻略: 介绍 美团实现搜索关键词自动匹配功能的方法可分为两个方面:前端交互和后端搜索引擎的支持,下面将对这两个方面一一解释。 前端交互 前端交互实现起来比较简单,主要分为以下两个步骤: 1. 给输入框添加键盘监听事件 这个步骤的意思是监听用户在输入框中的输入,并将输入的内容发送到后端搜索引擎进行匹配。代码如…

    Java 2023年5月19日
    00
  • JBuilder2005单元测试之创建测试固件

    首先,需要说明的是,JBuilder2005已经过时,现在推荐使用更加现代化的Java IDE,例如Eclipse、IntelliJ IDEA等。但是,本篇回答还是会根据题目要求讲解JBuilder2005中如何创建测试固件。 创建测试固件 测试固件可以理解为对于某个类或方法的测试环境的配置和准备,通常包括测试数据的设置、测试对象的初始化等。JBuilder…

    Java 2023年6月15日
    00
  • java 基于maven多模块合并打包部署的操作过程

    操作过程 基于Maven的多模块合并打包部署操作过程如下: 创建Maven multi-module工程:在创建工程的时候需要选择创建类型为maven-archetype-quickstart下的maven-archetype-quickstart。 shell mvn archetype:generate -DgroupId=com.example -Da…

    Java 2023年6月2日
    00
  • javascript分页代码实例分享(js分页)

    下面是关于“JavaScript分页代码实例分享(JS分页)”的详细攻略: 1. 分页功能原理 分页功能是指将一定数量的数据进行分页,在Web应用程序中将其展示给用户。分页的原理是将每页的数据放在一个数据容器中,根据容器高度和每个数据元素的高度计算出每页的元素数量,再通过前后翻页按钮实现翻页。 2. 分页代码实现 2.1 HTML结构 首先,在HTML中需要…

    Java 2023年6月16日
    00
  • Java 数组交集的实现代码

    下面是Java数组交集的实现代码完整攻略。 实现思路 交集是指两个集合中都存在的元素,可以用两种方法来实现数组交集。 嵌套循环:在第一个数组中循环遍历每个元素,在第二个数组中再循环遍历每个元素,如果两个元素相等,则为交集元素之一。 HashSet数据结构:使用HashSet将第一个数组中的元素都添加进去,然后遍历第二个数组,在HashSet中查找是否存在相同…

    Java 2023年5月26日
    00
  • Mybatis传递多个参数的解决办法(三种)

    我会为您详细讲解Mybatis传递多个参数的解决办法。 Mybatis传递多个参数的解决办法有以下三种: 1. 通过Map传递多个参数 这种传递多个参数的方式比较简单,我们只需要将需要传递的多个参数封装到一个Map中,然后将Map作为参数传递即可。 示例代码: public interface UserMapper { List<User> ge…

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