Java.io Packages Tutorial

Java.io 包教程

Java - java.io 包

java.io包是Java SDK的标准包。它包含用于通过数据流进行系统输入和输出、序列化以及文件系统的类。此包非常有用,因为它提供流来处理来自各种来源的输入,例如键盘、文件系统、网络等。类似地,此包包含用于写入各种来源的流类。本参考将引导您了解java.io包中提供的简单而实用的方法。

导入 java.io 包

作为Java的内置包,我们不需要下载任何外部库即可使用java.io包及其所有类,可以使用以下语法导入:

import java.io.*;

在这里,我们使用*运算符导入java.io包中的所有类,现在程序中可以使用任何类。对于特定类,例如InputStream,我们可以使用以下语法导入类:

import java.io.InputStream;

为什么在Java程序中使用java.io包

Java.io包中的类包含流/读取器/写入器类,可以使用统一模式读取和写入各种来源。以下列表显示了java.io包中部分类别的类。

  • 输入流 - 像ByteArrayInputStream、FileInputStream等输入流类有助于从诸如字节数组、文件之类的来源读取数据作为数据流,我们也可以使用缓冲来读取完整的内容。

  • 输出流 - 类似地,我们有OutputStream类,例如ByteArrayOutputStream、FileOutputStream等,可用于写入几乎任何类型的目标。

  • 错误流 - 错误流类似于OutputStream,用于将错误写入源。

  • 读取器 - 读取器类是面向字符的,专门用于读取基于文本的内容。

  • 写入器 - 同样,写入器类专门用于将基于文本的内容写入任何目标。

java.io包中的重要类

以下是java.io包中重要类的列表:

  • BufferedInputStream - BufferedInputStream类为另一个输入流添加功能,即缓冲输入和支持mark和reset方法的能力。

  • BufferedOutputStream - BufferedOutputStream类实现缓冲输出流。通过设置这样的输出流,应用程序可以将字节写入底层输出流,而无需为写入的每个字节都必须调用底层系统。

  • BufferedReader - BufferedReader类从字符输入流读取文本,缓冲字符以便高效地读取字符、数组和行。

  • BufferedWriter - BufferedWriter类将文本写入字符输出流,缓冲字符以便高效地写入单个字符、数组和字符串。

  • ByteArrayInputStream - ByteArrayInputStream类包含一个内部缓冲区,其中包含可以从流中读取的字节。内部计数器跟踪read方法要提供的下一个字节。

  • ByteArrayOutputStream - ByteArrayOutputStream类实现输出流,其中数据写入字节数组。缓冲区会随着向其写入数据而自动增长。

  • CharArrayReader - CharArrayReader类实现字符缓冲区,可用作字符输入流。

  • CharArrayWriter - CharArrayWriter类实现字符缓冲区,可用作Writer。缓冲区会随着向流中写入数据而自动增长。

  • Console - Console类提供方法来访问与当前Java虚拟机关联的基于字符的控制台设备(如果有)。

  • DataInputStream - DataInputStream类允许应用程序以与机器无关的方式从底层输入流读取原始Java数据类型。

  • DataOutputStream - DataOutputStream类允许应用程序以可移植的方式将原始Java数据类型写入输出流。然后,应用程序可以使用数据输入流读取回数据。

  • File - Java File类以抽象方式表示文件和目录路径名。此类用于创建文件和目录、文件搜索、文件删除等。File对象表示磁盘上的实际文件/目录。

  • FileDescriptor - FileDescriptor类实例充当对底层特定于机器的结构的不透明句柄,该结构表示打开的文件、打开的套接字或其他字节源或接收器。

  • FileInputStream - FileInputStream类从文件系统中的文件获取输入字节。可用的文件取决于主机环境。

  • FileOutputStream - FileOutputStream类是用于将数据写入File或FileDescriptor的输出流。

  • FilePermission - FilePermission类表示对文件或目录的访问权限。它由路径名和对该路径名有效的操作集组成。

  • FileReader - FileReader类是用于读取字符文件的便捷类。

  • FileWriter - FileWriter类是用于写入字符文件的便捷类。

  • FilterInputStream - FilterInputStream类包含其他输入流,它将其用作其基本数据源,可能在此过程中转换数据或提供其他功能。

  • FilterOutputStream - FilterOutputStream类是所有过滤输出流类的超类。

  • FilterReader - FilterReader类用于读取过滤的字符流。

  • FilterWriter - FilterWriter类用于写入过滤的字符流。

  • InputStream - InputStream类是所有表示字节输入流的类的超类。需要定义InputStream子类的应用程序必须始终提供返回下一个输入字节的方法。

  • InputStreamReader - InputStreamReader类是字节流到字符流的桥梁。它读取字节并使用指定的字符集将其解码为字符。

  • LineNumberInputStream - LineNumberInputStream类是一个输入流过滤器,它提供了跟踪当前行号的附加功能。一行是字节序列,以回车符 ('\r')、换行符 ('\n') 或回车符后立即跟换行符结尾。

  • LineNumberReader - LineNumberReader类是一个缓冲字符输入流,它跟踪行号。一行被认为以换行符 ('\n')、回车符 ('\r') 或回车符后立即跟换行符中的任何一个结束。

  • ObjectInputStream - ObjectInputStream类反序列化以前使用ObjectOutputStream写入的原始数据和对象。

  • ObjectInputStream.GetField - ObjectInputStream.GetField类提供对从输入流读取的持久字段的访问。

  • ObjectOutputStream - ObjectOutputStream类将原始数据类型和Java对象的图形写入OutputStream。可以使用ObjectInputStream读取(重建)这些对象。

  • Java.io - ObjectOutputStream.PutField - ObjectOutputStream.PutField类提供对要写入ObjectOutput的持久字段的编程访问。

  • ObjectStreamClass −ObjectStreamClass 类是序列化的类描述符。它包含类的名称和 serialVersionUID。可以使用 lookup 方法查找/创建在此 Java 虚拟机中加载的特定类的 ObjectStreamClass。

  • ObjectStreamField −ObjectStreamField 类是对可序列化类中可序列化字段的描述。ObjectStreamField 数组用于声明类的可序列化字段。

  • OutputStream −OutputStream 类是所有表示字节输出流的类的超类。输出流接受输出字节并将它们发送到某个接收器。需要定义 OutputStream 子类的应用程序必须至少提供一个写入一个输出字节的方法。

  • OutputStreamWriter −OutputStreamWriter 类是字符流到字节流的桥梁。写入其中的字符使用指定的字符集编码为字节。

  • PipedInputStream −PipedInputStream 类是一个管道输入流,可以连接到管道输出流,然后管道输入流提供写入管道输出流的任何数据字节。

  • PipedOutputStream −PipedOutputStream 类是一个管道输出流,可以连接到管道输入流以创建通信管道。

  • PipedReader −PipedReader 类是管道字符输入流。

  • PipedWriter −PipedWriter 类是管道字符输出流。

  • PrintStream −PrintStream 类向另一个输出流添加功能,即方便地打印各种数据值的表示形式的能力。

  • PrintWriter −PrintWriter 类将对象的格式化表示形式打印到文本输出流。

  • PushbackInputStream −PushbackInputStream 类向另一个输入流添加功能,即“回推”或“取消读取”一个字节的能力。

  • PushbackReader −PushbackReader 类是一个字符流读取器,允许将字符回推到流中。

  • RandomAccessFile −RandomAccessFile 类文件类似于存储在文件系统中的大型字节数组。此类的实例同时支持对随机访问文件的读取和写入。

  • Reader −Reader 类是用于读取字符流的抽象类。

  • SequenceInputStream −SequenceInputStream 类表示其他输入流的逻辑串联。它从一个有序的输入流集合开始,从第一个流读取直到到达文件结尾,然后从第二个流读取,依此类推,直到到达最后一个包含的输入流的文件结尾。

  • SerializablePermission −SerializablePermission 类用于可序列化权限。SerializablePermission 包含一个名称(也称为“目标名称”),但不包含操作列表;您要么拥有指定的权限,要么没有。目标名称是可序列化权限的名称。

  • StreamTokenizer −StreamTokenizer 类获取输入流并将其解析为“标记”,允许一次读取一个标记。流标记器可以识别标识符、数字、带引号的字符串和各种注释样式。

  • StringBufferInputStream −StringBufferInputStream 类允许应用程序创建一个输入流,其中读取的字节由字符串的内容提供。应用程序还可以使用 ByteArrayInputStream 从字节数组读取字节。此类仅使用字符串中每个字符的低八位。此类已被 Oracle 弃用,不应再使用。

  • StringReader −StringReader 类是一个字符流,其源是字符串。

  • StringWriter −StringWriter 类是一个字符流,它将其输出收集到一个字符串缓冲区中,然后可以使用该缓冲区构造一个字符串。关闭 StringWriter 没有效果。在流关闭后,可以调用此类中的方法,而不会生成 IOException。

  • Writer −Writer 类是用于写入字符流的抽象类。

java.io 包的示例

练习以下示例以学习 java.io 包类的概念和用法。

java.io.ByteArrayInputStream 示例

以下程序说明了 ByteArrayInputStream 支持的几种方法 −

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteStreamTest {
   public static void main(String[] args) throws IOException {
      byte[] buf = {65, 66, 67, 68, 69};
      ByteArrayInputStream bais = null;
      
      try {
         // create new byte array input stream
         bais = new ByteArrayInputStream(buf);
         
         int b =0;
         
         // read till the end of the stream
         while((b = bais.read())!=-1) {
            
            // convert byte to character
            char c = (char)b;
            
            // print
            System.out.println("byte :"+b+"; char : "+ c);
            
         }
         System.out.print(bais.read()+" Reached the end");
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(bais!=null)
            bais.close();
      }
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

byte :65; char : A
byte :66; char : B
byte :67; char : C
byte :68; char : D
byte :69; char : E
-1 Reached the end

java.io.ByteArrayOutputStream 示例

以下程序说明了 ByteArrayOutputStream 支持的几种方法 −

package com.tutorialspoint;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class BufferedOutputStreamDemo {
   public static void main(String[] args) throws Exception {
      ByteArrayOutputStream baos = null;
      BufferedOutputStream bos = null;
		
      try {
         // create new ByteArrayOutputStream
         baos = new ByteArrayOutputStream();

         // create new BufferedOutputStream with baos
         bos = new BufferedOutputStream(baos);
			
         // assign integer
         int b = 87;

         // write to stream
         bos.write(b);

         // force the byte to be written to baos
         bos.flush();
			
         // convert ByteArrayOutputStream to bytes
         byte[] bytes = baos.toByteArray();	

         // prints the byte
         System.out.println(bytes[0]);
         
      } catch(IOException e) {
         // if I/O error occurs.
         e.printStackTrace();
      } finally {
         // releases any system resources associated with the stream
         if(baos!=null)
            baos.close();
         if(bos!=null)
            bos.close();
      }
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

87

java.io.PrintWriter 示例

以下程序说明了 PrintWriter 支持的几种方法 −

package com.tutorialspoint;

import java.io.*;

public class PrintWriterDemo {
   public static void main(String[] args) {
      String s = "Hello world.";
      
      try {
         // create a new writer
         PrintWriter pw = new PrintWriter(System.out);

         // print string
         pw.print(s);

         // change the line
         pw.println();

         // print another string
         pw.print("This is an example.");

         // flush the writer
         pw.flush();
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

Hello world.
This is an example.

何时使用 java.io 包?

每当我们需要执行 I/O 操作时,都可以依赖 java.io 包中提供的 I/O 类。本参考是为初学者编写的,旨在帮助他们了解 Java.io 包中所有方法的基本功能。

先决条件

在开始练习本参考中提供的各种类型的示例之前,我假设您已经了解基本的 Java 编程。

广告