Java IO流使用指南

一、什么是IO流?

IO(Input/Output)即输入与输出,Java中的IO流是用来处理文件与数据流的机制。Java将流定义为一个连续的字符序列和字节序列。在Java中,流是用于读写操作的,数据流向被读取,也可以流向被写入。IO流通常分为字节流和字符流。字节流用于处理二进制数据,例如处理图像和音频文件;字符流则用于处理文本数据,例如处理文本文件。Java中的IO流主要有三个途径:File类、流式传输API、NIO。

public class IOStreamDemo {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileInputStream fis = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String line;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
            isr.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、JAVA IO流的分类

Java的IO流可以根据数据传输方式划分为字节流和字符流,可以根据操作的数据单位划分为节点流和处理流。

1. 字节流和字符流

字节流主要由InputStream和OutputStream构成,其中InputStream是抽象类,可以根据具体数据类型采取相应的输入流,如FileInputStream;OutputStream也是抽象类,可以根据具体数据类型采取相应的输出流,如FileOutputStream。

字符流主要由Reader和Writer构成,其中Reader是抽象类,可以根据具体数据类型采取相应的读取字符流,如FileReader;Writer也是抽象类,可以根据具体数据类型采取相应的写入字符流,如FileWriter。

import java.io.*;

public class ByteStreamDemo {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileInputStream fis = new FileInputStream(file);
            byte[] b = new byte[1024];
            int len;
            while ((len = fis.read(b)) != -1) {
                System.out.println(new String(b,0,len, "UTF-8"));
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 节点流和处理流

节点流负责数据的读写,处理流则利用节点流进行数据读写的过程中添加相应的处理方式。节点流可以直接操作文件,但是处理流不能单独存在,它必须依托于其他的节点流的基础之上。常见的例子是BufferedReader和文件的结合。

import java.io.*;

public class ReaderDemo {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileInputStream fis = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String line;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
            isr.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、Java IO流的常用类

1. FileInputStream 和 FileOutputStream类

FileInputStream和FileOutputStream用于读取和输出文件数据。这两个类是字节流的标准类型,它们通过简单的InputStream和OutputStream类进行包装实现。

import java.io.*;

public class FileStreamDemo {
    public static void main(String[] args) {
        File file = new File("test.txt");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            String data = "这是Java IO流的使用指南";
            byte[] b = data.getBytes("UTF-8");
            fos.write(b);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            FileInputStream fis = new FileInputStream(file);
            byte[] b = new byte[(int) file.length()];
            fis.read(b);
            System.out.println(new String(b, "UTF-8"));
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. Reader和Writer类

Reader和Writer类是用于读取和输出字符数据的类,它提供了直观的读写接口,适合于处理文本类型数据。

import java.io.*;

public class FileWriterDemo {
    public static void main(String[] args) {
        File file = new File("test.txt");
        try {
            FileWriter fw = new FileWriter(file);
            fw.write("这是Java IO流的使用指南");
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            FileReader fr = new FileReader(file);
            char[] b = new char[(int) file.length()];
            fr.read(b);
            System.out.println(new String(b));
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. BufferedReader 和 BufferedWriter类

BufferedReader和BufferedWriter是高效的读取和输出字符数据的类,它们提供了缓冲读写接口,可以提高IO效率。

import java.io.*;

public class BufferedWriterDemo {
    public static void main(String[] args) {
        File file = new File("test.txt");
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));
            bw.write("这是Java IO流的使用指南");
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四、Java NIO介绍

NIO(New IO)是JDK1.4版本引入的一组带有新功能的IO API。NIO支持面向缓冲的,基于通道的IO操作。 NIO是一种基于缓存的IO方式,主要是为了解决BIO(Blocking IO)多线程读取数据的问题,在NIO中可以设置一个或多个缓存装满需要传输的内容,然后再操作缓存中的内容。

import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.nio.file.*;

public class NIODemo {
    public static void main(String[] args) {
        try {
            Path path = Paths.get("test.txt");
            String input = "这是Java NIO的使用指南";
            Files.write(path, input.getBytes(), StandardOpenOption.CREATE);

            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            Charset charset = Charset.forName("UTF-8");
            FileChannel fileChannel = FileChannel.open(path);
            int bytesRead = fileChannel.read(byteBuffer);
            while (bytesRead != -1){
                byteBuffer.flip();
                while(byteBuffer.hasRemaining()) {
                    System.out.print(charset.decode(byteBuffer));
                }
                byteBuffer.clear();
                bytesRead = fileChannel.read(byteBuffer);
            }
            fileChannel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/239278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:15
下一篇 2024-12-12 12:15

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • wzftp的介绍与使用指南

    如果你需要进行FTP相关的文件传输操作,那么wzftp是一个非常优秀的选择。本文将从详细介绍wzftp的特点和功能入手,帮助你更好地使用wzftp进行文件传输。 一、简介 wzft…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论