JAVA IO API使用详解

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日

相关文章

  • JavaScript解析JSON数据示例

    下面是关于“JavaScript解析JSON数据示例”的完整攻略。 什么是JSON数据格式 JSON指的是JavaScript对象表示法(JavaScript Object Notation),它是一种轻量级的数据交换格式。它易于人们阅读和编写,同时也易于机器解析和生成。在很多网站中,JSON已成为主流的数据格式之一。 具体来说,JSON数据格式是由一系列键…

    Java 2023年5月26日
    00
  • MyBatis源码剖析之Mapper代理方式详解

    首先,我们需要了解什么是MyBatis以及Mapper的概念。 MyBatis是一款轻量级的持久层框架,它能够与各种不同类型的数据库进行交互,从而为开发者提供了一种简单、方便的数据持久化解决方案。在MyBatis中,Mapper代理方式是一种常用的操作数据库的方式,它是通过动态代理的方式将方法与SQL语句进行绑定,当真正执行方法时,MyBatis会根据方法名…

    Java 2023年5月20日
    00
  • 元空间与永久代的区别是什么?

    以下是关于元空间与永久代的区别的完整使用攻略: 元空间与永久代的区别是什么? 元空间和久代都是Java虚拟机中用于存类信息的区域,但它们之间有以下几点区别: 1. 存储位置 永久代Java虚拟机规范中的一块内存区域,位于堆内存的一部分。而元空间则是在Java 8中入的,它不再于堆内存中,而是直接使用本地内存。 2. 内存管理 永久代的内存空是有限的,当存储的…

    Java 2023年5月12日
    00
  • Java_异常类(错误和异常,两者的区别介绍)

    Java 异常类 在 Java 编程中,异常类是一种用来处理错误和异常情况的特殊类。Java 语言提供了一组异常类,程序员可以使用这些类来编写高效、可读性强、容错性好的程序。 错误和异常 通常情况下,我们用错误表示异常中最严重的情况,而用异常表示较为轻微的情况。当程序执行中发生错误或异常时,会抛出一个异常对象,可以通过 try-catch 块捕获异常并处理。…

    Java 2023年5月27日
    00
  • 一文带你了解SpringBoot中常用注解的原理和使用

    首先我们来介绍一下 Spring Boot 中常用的注解: @SpringBootApplication 这个注解是 Spring Boot 应用程序的入口点,同时也包含了 @EnableAutoConfiguration 和 @ComponentScan 注解,表示使用自动配置和组件扫描。 @RestController 这个注解表示一个类是 RESTfu…

    Java 2023年5月15日
    00
  • JAVALambda表达式与函数式接口详解

    JAVALambda表达式与函数式接口详解 Lambda表达式是Java 8中新增的一种语法,它使得Java语言变得更加简洁、高效。Lambda表达式就是将一个匿名内部类的实现变成了一种函数式风格,被称为“函数式编程”,同时Java 8中也新增了许多函数式接口来支持Lambda表达式,为Java程序员提供了更多的选择。 什么是Lambda表达式 Lambda…

    Java 2023年5月26日
    00
  • SpringData JPA实现查询分页demo

    下面我会给出 Spring Data JPA 实现查询分页 Demo 的详细攻略。 1. 添加依赖 在项目的 pom.xml 文件中添加 Spring Data JPA 依赖: <dependency> <groupId>org.springframework.data</groupId> <artifactId&g…

    Java 2023年5月20日
    00
  • C++递归算法处理岛屿问题详解

    C++递归算法处理岛屿问题详解 什么是岛屿问题? 岛屿问题是指在一个由字母 O 和 X 组成的二维矩阵中,连成一片的 O 组成的区域被称为一个岛屿。请编写一个 C++ 程序,计算出给定的矩阵中岛屿的数量。 解题思路 解题的基本思路是对每个位置进行深度优先搜索,将和当前位置连通的所有 O 都标记为已访问。如此定义岛屿的个数即为进行深度优先搜索的次数。 接下来让…

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