欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

JavaIO流(2)--IO流原理、流的分类及节点流文件流操作

发布时间:2023/12/2 68 豆豆
生活随笔 收集整理的这篇文章主要介绍了 JavaIO流(2)--IO流原理、流的分类及节点流文件流操作 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • IO流简介
    • IO流原理
    • 流的分类
    • IO 流体系
    • 节点流和处理流
    • 节点流操作


IO流简介

I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。

Java程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行。

java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。


IO流原理

输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。


流的分类

①按操作数据单位不同分为:字节流(8 bit 一般用于非文本文件),字符流(16 bit 一般用于文本文件)

②按数据流的流向不同分为:输入流,输出流(相对的)

③按流的角色的不同分为:节点流(直接处理文件),处理流(处理被包含的流)


IO 流体系

Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。


节点流和处理流

节点流:直接从数据源或目的地读写数据


处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。


节点流操作

读入以FileReader为例

import java.io.File; import java.io.FileReader; import java.io.IOException;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/ public class FileReaderTest {public static void main(String[] args) {FileReader fileReader = null;try { //一定需要try-catch//1、实例化File对象,指明要操作的文件File file = new File("IO\\hello.txt");//2、提供具体的流fileReader = new FileReader(file);//3、读取操作int read = fileReader.read(); //空参为一位一位读取,末尾返回-1while (read != -1){System.out.print((char) read);read = fileReader.read();}} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fileReader != null) { //确保不会因具体流未创建而产生空指针异常fileReader.close();}} catch (IOException e) {e.printStackTrace();}}} }

import java.io.File; import java.io.FileReader; import java.io.IOException;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/ public class FileReaderTest {public static void main(String[] args) {FileReader fileReader = null;try { //一定需要try-catch//1、实例化File对象,指明要操作的文件File file = new File("IO\\hello.txt");//2、提供具体的流fileReader = new FileReader(file);//3、读取操作char[] chars = new char[5];//char型数组为参数,该数组相当于一个容器,把读取放在里面,返回该次读取的个数,末尾返回-1// 最后若不够,容器后部分仍为上一次取的,前部分则被新的这次取到的覆盖了int length = fileReader.read(chars);while (length != -1){for (int i = 0; i < length; i++) {System.out.print(chars[i]);}length = fileReader.read(chars);}} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}} }

写出以FileWriter为例

import java.io.*;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/ public class FileReaderTest {public static void main(String[] args) {FileWriter fw1 = null; //若硬盘中不存在file,创建之;若存在,内容覆盖之try {//1、实例化File对象,指明要写出的文件File file = new File("IO\\hi.txt");//2、创建具体的流fw1 = new FileWriter(file);//FileWriter fw2 = new FileWriter(file,false); //若硬盘中不存在file,创建之;若存在,内容覆盖之//FileWriter fw3 = new FileWriter(file,true); //若硬盘中不存在file,创建之;若存在,内容追加之//3、写出操作fw1.write("Hello World!\n",0,5); //写出“Hello”fw1.write("你好,世界!"); //写出“你好,世界!”} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fw1 != null) fw1.close();} catch (IOException e) {e.printStackTrace();}}} }

实现一个图片复制(读入写出,使用字节流)

import java.io.*;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/ public class FileReaderTest {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {File inFile = new File("IO\\input.jpg");File outFile = new File("IO\\output.png");fis = new FileInputStream(inFile);fos = new FileOutputStream(outFile);byte[] bytes = new byte[1024]; //通常使用1024,2的10次方int length = fis.read(bytes);while (length != -1){fos.write(bytes,0,length);length = fis.read(bytes);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fos != null) fos.close();} catch (IOException e) {e.printStackTrace();}try {if (fis != null) fis.close();} catch (IOException e) {e.printStackTrace();}}} }

总结

以上是生活随笔为你收集整理的JavaIO流(2)--IO流原理、流的分类及节点流文件流操作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。