Java输入输出流

在Java程序处理文件和网络通信时,输入输出流是一个非常关键且基础的概念。它是Java程序与外界交互的桥梁,它可以读写各种类型的数据,如文本、图像、音频和视频等。本文将全面介绍Java输入输出流相关知识。

一、基础认识

在Java中,输入输出流是通过java.io包提供的。输入流从任何来源读取数据,例如从文件、网络、键盘等获取数据,而输出流将数据写回文件、网络或者控制台等。Java中的输入输出流从字节流开始,提供了InputStream和OutputStream抽象类,这两个类提供了读写字节流的相关操作。

InputStream和OutputStream类是Java输入输出流抽象类的基础,它们分别提供了读和写字节的方法,如:read()和write()。在Java中还提供了Reader和Writer类,用于读写字符流。这些类在读写文件和网络通信时都非常有效。

二、使用文件输入输出流

使用文件输入输出流时,需要导入java.io.File类,同时使用FileInputStream和FileOutputStream类开启文件输入输出流。下面是Java代码实现:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileDemo {
   public static void main(String[] args) {

      File file = new File("InputFile.txt");
      FileInputStream inputStream = null;
      FileOutputStream outputStream = null;

      try {
         //使用文件输入流读取文件
         inputStream = new FileInputStream(file);
         byte[] bytesArray = new byte[(int) file.length()];
         inputStream.read(bytesArray);

         //使用文件输出流写入文件
         outputStream = new FileOutputStream("OutputFile.txt");
         outputStream.write(bytesArray);

         System.out.println("Operation done successfully");

      } catch (IOException e) {
         e.printStackTrace();
      } finally {
        try {
            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
      }
   }
}

该代码使用了FileInputStream读取文件内容,使用FileOutputStream将其写回到另一个文件中。在读取文件时,先读取文件的长度,然后在相应大小的字节数组中读取内容。在写入文件时,将读取的字节数组作为write()方法的参数传递,从而将内容写入文件。其中的try-catch快和finally快用于关闭两个流。

三、使用字节数组输入输出流

字节数组输入输出流是一种特殊的流,它用于从数据源(如字节数组)中读取数据或者向目标(如字节数组)中写入数据。下面是Java代码实现:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class ByteArrayDemo {
   public static void main(String[] args) {

      byte[] bytes = { 10, 20, 30, 40, 50 };
      ByteArrayInputStream byteArrayInputStream = null;
      ByteArrayOutputStream byteArrayOutputStream = null;

      try {
         //使用ByteArrayInputStream读取字节数据
         byteArrayInputStream = new ByteArrayInputStream(bytes);
         
         //使用ByteArrayOutputStream输出字节数据
         byteArrayOutputStream = new ByteArrayOutputStream();
         int data;
         
         while ((data = byteArrayInputStream.read()) != -1) {
            byteArrayOutputStream.write(Character.toUpperCase(data));
         }

         System.out.println(Arrays.toString(byteArrayOutputStream.toByteArray()));
         
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         try {
            byteArrayInputStream.close();
            byteArrayOutputStream.close();
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
   }
}

该代码使用ByteArrayInputStream读取字节数组,使用ByteArrayOutputStream将其转为大写字母,再将其转为字节数组并打印输出。这里使用了字符函数Character.toUpperCase()将小写字母转换为大写字母,然后使用write()方法写入ByteArrayOutputStream流中。

四、使用字符输入输出流

Java字符输入输出流分别由Reader和Writer抽象类构成,用于读取或写入字符流。下面是Java代码实现:

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class FileWriterDemo {
   public static void main(String[] args) {

      String str = "Java I/O stream is really powerful";
      char[] chars = new char[str.length()];

      try {
         //使用FileWriter将字符写入文件
         Writer writer = new FileWriter("output.txt");
         writer.write(str);
         writer.close();

         //使用字符读取流读取文件内容
         Reader reader = new FileReader("output.txt");
         reader.read(chars);
         reader.close();

         System.out.println(chars);

      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

该代码使用FileWriter将字符流写入文件中并关闭FileWriter实例,然后使用FileReader读取写入的文件内容并存储在字符数组chars中,并且打印输出内容。这里需要注意,如果使用FileWriter时没有指定第二个参数:true,那么将覆盖原先的内容。

五、使用数据输入输出流

数据输入输出流是一种输入输出流,用于读写Java基本类型数据,如int、double、long等,以及字符串、字符数组、字节数组等数据类型。下面是Java代码实现:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

public class DataInputStreamDemo {
   public static void main(String[] args) {

      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);

      try {
         //使用数据输出流写入基本数据类型
         dataOutputStream.writeDouble(Math.random());
         dataOutputStream.writeBoolean(true);
         dataOutputStream.writeByte(100);
         dataOutputStream.writeChar('A');

         byte[] bytes = byteArrayOutputStream.toByteArray();
         
         //使用数据输入流读取基本数据类型
         DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytes));

         System.out.println(dataInputStream.readDouble());
         System.out.println(dataInputStream.readBoolean());
         System.out.println(dataInputStream.readByte());
         System.out.println(dataInputStream.readChar());

         dataOutputStream.close();
         dataInputStream.close();
         
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

该代码使用ByteArrayOutputStream将写入的基本数据类型数据转换为字节数组,然后使用DataInputStream读取并打印输出读取的数据。这里首先通过writeDouble()、writeBoolean()、writeByte()和writeChar()等方法向数据输出流写入数据类型,然后将其转换为字节数组。这里需要注意的是写入和读取应该是对应的,在读取时也应该按写入的类型按顺序读取。

六、总结

在Java输入输出流中,我们通过讲解文件输入输出流、字节数组输入输出流、字符输入输出流和数据输入输出流等方式,详细介绍了Java输入输出相关知识。输入输出流是Java程序与外界交互的桥梁,可以读写各种类型的数据。涉及到输入输出流操作时,需要注意流的关闭,以免导致资源泄漏。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TKIYTKIY
上一篇 2024-11-01 14:09
下一篇 2024-11-01 14:09

相关推荐

  • java client.getacsresponse 编译报错解决方法

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

    编程 2025-04-29
  • Java JsonPath 效率优化指南

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

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

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

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

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

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

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

    编程 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
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论