IO 的分类

news/2024/11/29 9:57:36/

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

推荐:体系化学习Java(Java面试专题)

文章目录

  • Java IO 按数据操作方式进行分类
  • 一、字节流 InputStream 、OutputStream
  • 二、字符流 InputStream 、OutputStream
  • 三、缓冲流 BufferedReader、BufferedWriter
  • 四、数据流 DataOutputStream、DataInputStream
  • 五、对象流 ObjectOutputStream、ObjectInputStream
  • 六、文件流 FileInputStream、FileOutputStream

Java IO 按数据操作方式进行分类

Java IO 按照数据操作方式进行分类,通常分为以下几类:

  1. 字节流(Byte Stream):以字节为单位进行操作,包括 InputStream 和 OutputStream 等类。字节流可以用于读写二进制文件、网络数据等。

  2. 字符流(Character Stream):以字符为单位进行操作,包括 Reader 和 Writer 等类。字符流可以处理文本文件、网络数据等。

  3. 缓冲流(Buffered Stream):通过缓冲区来提高 I/O 效率,包括 BufferedInputStream、BufferedOutputStream、BufferedReader 和 BufferedWriter 等类。

  4. 数据流(Data Stream):提供了读写基本数据类型和字符串的方法,包括 DataInputStream 和 DataOutputStream 等类。

  5. 对象流(Object Stream):用于读写 Java 对象,包括 ObjectInputStream 和 ObjectOutputStream 等类。

  6. 文件流(File Stream):用于读写文件的流,包括 FileInputStream 和 FileOutputStream 等类。

以上是 Java IO 常见的分类方式,不同类型的流在使用时需要根据具体情况进行选择。

一、字节流 InputStream 、OutputStream

 package com.pany.camp.io;import cn.hutool.core.thread.ThreadUtil;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class ByteStreamExample {public static void main(String[] args) throws IOException {String content = "Hello, World!";FileOutputStream output = new FileOutputStream("data.txt");output.write(content.getBytes());output.close();System.out.println("内容已成功写入文件!");ThreadUtil.sleep(5000);InputStream input = new FileInputStream("data.txt");byte[] buffer = new byte[1024];int len = input.read(buffer);input.close();String content1 = new String(buffer, 0, len);System.out.println(content1);}
}

我们首先创建了一个字符串变量 content,表示要写入文件的内容。然后,我们创建了一个 FileOutputStream 对象,并指定要写入的文件名为 “data.txt”。接下来,我们使用 write() 方法将字符串转换为字节数组,并将其写入到输出流中。最后,我们关闭输出流。
我们使用 FileInputStream 创建了一个输入流,并指定要读取的文件名为 “data.txt”。然后,我们创建了一个 byte 数组作为缓冲区,并使用 read() 方法从输入流中读取数据,并将其存储在缓冲区中。最后,我们关闭输入流,并使用 String 类的构造函数将缓冲区中的字节转换为字符串,并将其输出到控制台。

二、字符流 InputStream 、OutputStream

package com.pany.camp.io;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class ReaderWriterExample {public static void main(String[] args) throws IOException {Reader reader = new FileReader("data.txt");Writer writer = new FileWriter("data1.txt");char[] buffer = new char[1024];int len;while ((len = reader.read(buffer)) != -1) {writer.write(buffer, 0, len);}reader.close();writer.close();System.out.println("内容已成功复制到文件!");}
}

我们首先创建了一个 FileReader 对象和一个 FileWriter 对象,分别用于读取和写入文件。然后,我们创建了一个 char 数组作为缓冲区,并使用 while 循环从输入流中读取数据,并将其写入输出流中。最后,我们关闭输入流和输出流。

三、缓冲流 BufferedReader、BufferedWriter

package com.pany.camp.io;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class BufferedReaderWriterExample {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new FileReader("data.txt"));BufferedWriter writer = new BufferedWriter(new FileWriter("data2.txt"));String line;while ((line = reader.readLine()) != null) {writer.write(line);// 分割writer.newLine();}reader.close();writer.close();System.out.println("内容已成功复制到文件!");}
}

我们首先创建了一个 BufferedReader 对象和一个 BufferedWriter 对象,分别用于读取和写入文件。然后,我们使用 while 循环从输入流中读取每一行数据,并将其写入输出流中。注意,我们使用了 BufferedWriter 的 newLine() 方法来写入换行符,以确保复制后的文件与原文件格式相同。最后,我们关闭输入流和输出流。

四、数据流 DataOutputStream、DataInputStream

package com.pany.camp.io;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataInputOutputExample {public static void main(String[] args) throws IOException {DataOutputStream output = new DataOutputStream(new FileOutputStream("data3.txt"));output.writeUTF("Hello, World!");output.writeInt(42);output.close();System.out.println("数据已成功写入文件!");DataInputStream input = new DataInputStream(new FileInputStream("data3.txt"));String message = input.readUTF();int number = input.readInt();input.close();System.out.println("从文件中读取的字符串为:" + message);System.out.println("从文件中读取的整数为:" + number);}
}

我们首先创建了一个 DataOutputStream 对象,并使用 writeUTF() 和 writeInt() 方法将一个字符串和一个整数写入到文件中。然后,我们关闭输出流,并输出一条消息表示数据已成功写入文件。

接下来,我们创建了一个 DataInputStream 对象,并使用 readUTF() 和 readInt() 方法从文件中读取之前写入的数据。最后,我们关闭输入流,并输出读取到的字符串和整数。

五、对象流 ObjectOutputStream、ObjectInputStream

package com.pany.camp.io;import java.io.*;public class ObjectStreamExample {public static void main(String[] args) throws IOException, ClassNotFoundException {Person person = new Person("张三", 18);ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("data4.txt"));output.writeObject(person);output.close();System.out.println("对象已成功写入文件!");ObjectInputStream input = new ObjectInputStream(new FileInputStream("data4.txt"));Person newPerson = (Person) input.readObject();input.close();System.out.println("从文件中读取的对象为:" + newPerson);}
}
package com.pany.camp.io;import java.io.Serializable;public class Person implements Serializable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String toString() {return "Person [name=" + name + ", age=" + age + "]";}
}

我们首先创建了一个 Person 对象,并将其写入到文件中。注意,Person 类实现了 Serializable 接口,以便可以将其序列化并写入文件中。

然后,我们创建了一个 ObjectInputStream 对象,并使用 readObject() 方法从文件中读取之前写入的对象。注意,在读取对象时,我们需要将其转换为 Person 类型。

最后,我们关闭输入流,并输出读取到的 Person 对象。

六、文件流 FileInputStream、FileOutputStream

package com.pany.camp.io;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileStreamExample {public static void main(String[] args) throws IOException {FileInputStream input = new FileInputStream("data.txt");FileOutputStream output = new FileOutputStream("data4.txt");byte[] buffer = new byte[1024];int len;while ((len = input.read(buffer)) != -1) {output.write(buffer, 0, len);}input.close();output.close();System.out.println("内容已成功复制到文件!");}
}

我们首先创建了一个 FileInputStream 对象和一个 FileOutputStream 对象,分别用于读取和写入文件。然后,我们创建了一个 byte 数组作为缓冲区,并使用 while 循环从输入流中读取数据,并将其写入输出流中。最后,我们关闭输入流和输出流。


http://www.ppmy.cn/news/277044.html

相关文章

利用彩虹线课程中的知识来制作精美的渐变色块和彩虹字

彩虹字 像这样的效果,同样我们可以使用“渐变色”的技巧。来看下面如何操作 选中字体,然后鼠标右键选”设置型状格式“ 选择“渐变” 有两处决定了彩虹字的样式。 拖动的箭头,这个箭头代表“每一个段”显示的色彩,如我DEMO中的字体是“两段颜色”-蓝+黄组合出来的;角度,…

202206

vue build命令导致??和?.语法无法解析 npm install --save-dev babel/plugin-proposal-nullish-coalescing-operator npm install babel/plugin-proposal-optional-chaining --save-dev同时babel.config.js文件添加 module.exports {// 其他代码plugins: [babel/plugin-p…

20211207

领导说不做OFFICE。吾急了:你做别的有什么前途?OFFICE也好要钱啊。在一纸上,说只有一个顶级水平(我)。做视频? 我站在一个假山石头上?头顶天花板了。 想起倪光南?在某个软件中能给他…

20230119

年前单位最后一天,上午焦头烂额,十几个事情要处理。下午处理完没事了,简单看了下javaweb的基础,http访问,tomcat简单介绍等等。 计划回去的话,mybatis基本也会用,还是继续了解一些平台层的东西。…

20221007

我们, 1月10日,农历腊月初八,我们在一起了,你说,记得喝点腊八粥,我说,对你,我才不凑活呢; 8月13日,农历七月十六,我们订婚了; 9月1…

【1010】

1010:计算分数的浮点数值 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 98986 通过数: 58600 【题目描述】 两个整数a和b分别作为分子和分母,既分数a/b,求它的浮点数值(双精度浮点数,保留小数点后9位)。 【输入】 …

20230411

1.使用readdir来将目录中的链接文件显示出来 2.写入到一个文件内部 3.将文件中的内容显示到屏幕 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #inc…