【Java】I/O流—字节流与字符流的基础入门

🌺个人主页:Dawn黎明开始
🎀系列专栏:Java
每日一句:所谓万丈深渊,走下去也是前程万里

📢欢迎大家关注🔍点赞👍收藏⭐️留言📝

文章目录

一.🔐字节流

1.1🔓定义

1.1.1🔑说明

1.2🔓输出流

1.2.1🔑构造方法

1.2.2🔑成员方法

1.2.3🔑实例练习

1.3🔓输入流

1.3.1🔑构造方法

1.3.2🔑成员方法

1.3.3🔑实例练习

二.🔐字符流

2.1🔓定义

2.1.1🔑说明

2.2🔓输出流

2.2.1🔑构造方法

2.2.2🔑成员方法

2.2.3🔑实例练习

2.3🔓输入流

2.3.1🔑构造方法

2.3.2🔑成员方法

2.3.3🔑实例练习


📝前言

Java中的I/O流主要定义在java.io包中,该包下定义了很多类,其中有4个类为流的顶级类,所有流类型的父类,分别为InputStreamOutputStreamReaderWriter

一.🔐字节流

1.1🔓定义

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流

1.1.1🔑说明

(1)针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStreamFileOutputStream

(2)FileOutputStreamOutputStream子类,它是操作文件的字节输出流,专门用于输出文件中的数据。

(3)FileInputStreamInputStream子类,它是操作文件的字节输入流,专门用于读取文件中的数据。

(3)从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取。

1.2🔓输出流

1.2.1🔑构造方法

1.2.2🔑成员方法

继承OutputStream类的方法

📝注意

(1)前三个write()方法都是用来写数据的,分按字节读取和按字节数组写入

(2)flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新

(3)close()方法是用来关闭流并释放与当前IO流相关的系统资源。

1.2.3🔑实例练习

🚩FileOutputStream操作步骤

1.创建字节输出流对象

2.调用write()方法写数据

3.释放资源

🚩实例练习1

代码如下👇🏻

package StreamDemo;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo1 {
  public static void main(String[] args) throws IOException {
		// 创建字节输出流对象
     FileOutputStream fos = new FileOutputStream("fos.txt");
	   /*
	    * 创建字节输出流对象了做了几件事情:
		* A:调用系统功能去创建文件
		* B:创建fos对象
		* C:把fos对象指向这个文件
		*/
	    //写数据
      fos.write("hello,IO\n".getBytes());
	    //关闭流,释放资源
	  fos.close();
	}
}

运行结果👇🏻

🔥思考🔥

如果文件不存在,会报错吗?

      不会,会新建一个文件写入

为什么一定要close()呢?
      1:让流对象变成垃圾,这样就可以被垃圾回收器回收了
      2:通知系统去释放跟该文件相关的资源

❗如何实现数据的追加写入?

     用构造方法带第二个参数是true的情况即可

🚩实例练习2

代码如下👇🏻

package StreamDemo;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo2 {
   public static void main(String[] args) throws IOException {
      FileOutputStream fos=new FileOutputStream("a.txt");
		//public void write(byte[] b):写一个字节数组
		byte[] bys={97,98,99,100,101};
		  //public void write(byte[] b,int off,int len):写一个字节数组的一部分
	    fos.write(bys,1,3);
	      //释放资源
		fos.close();
	}
}

运行结果👇🏻

🔥思考🔥

为什么是bcd而不是98,99,100?
        字符编码问题

1.3🔓输入流

1.3.1🔑构造方法

1.3.2🔑成员方法

(1).前三个read()方法都是用来读数据的,分按字节读取和按字节数组读取

(2).进行I/O流操作时,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源

1.3.3🔑实例练习

🚩FileInputStream操作步骤

1.创建字节输入流对象

2.调用write()方法

3.关闭流,释放资源

🚩实例练习1(一次读取一个字节)

代码如下👇🏻

package StreamDemo;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo1 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileInputStream fin1 = new FileInputStream("fin1.txt");
		int b=0;
		while((b=fin1.read())!=-1) {  
			System.out.print((char)b);
		}
		fin1.close();
	}
}

运行结果👇🏻

🚩实例练习2(一次读取一个数组)

代码如下👇🏻

package StreamDemo;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo2 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileInputStream fin2 = new FileInputStream("fin2.txt");
		byte []bys =new byte[1024];
		int len=0;
		while((len=fin2.read(bys))!=-1) {
			String string = new String(bys,0,len);
			System.out.println(string);
		}
	}
}

运行结果👇🏻

二.🔐字符流

2.1🔓定义

2.1.1🔑说明

除了字节流,JDK还提供了用于实现字符操作的字符流,同字节流一样,字符流也有两个抽象的顶级父类,分别是ReaderWriter

2.2🔓输出流

2.2.1🔑构造方法

2.2.2🔑成员方法

继承OutputStreamReader类的方法

public void write(int c):写一个字符

public void write(char[] cbuf):写一个字符数组

public void write(char[] cbuf,int off,int len):写一个字符数组的一部分

public void write(String str):写一个字符串

public void write(String str,int off,int len):写一个字符串的一部分

2.2.3🔑实例练习

🚩实例练习1

代码如下👇🏻

package FileWrite;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
	public static void main(String[] args) throws IOException {
		FileWriter fw = new FileWriter("fw.txt");
		fw.write('a');
		fw.write(97);
		fw.close();
	}
}

运行结果👇🏻

🚩实例练习2

代码如下👇🏻

package FileWrite;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo1 {
	public static void main(String[] args) throws IOException {
		FileWriter fw = new FileWriter("fw.txt");
		fw.write('a');
		fw.write(97);
		fw.flush();
		fw.write("\nhello");
		fw.close();
	}
}

运行结果👇🏻

📝思考:close()和flush()的区别?

 A:close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。

 B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

2.3🔓输入流

2.3.1🔑构造方法

2.3.2🔑成员方法

继承InputStreamReader类的方法

int read():一次读取一个字符

int read(char[] chs):一次读取一个字符数组

2.3.3🔑实例练习

🚩实例练习1(一次读取一个字符)

代码如下👇🏻

package FileReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fr = new FileReader("a.txt");
		 int ch = 0;
		 while ((ch = fr.read()) != -1) {
		 System.out.print((char) ch);
		 }
	}
}

🚩实例练习2(一次读取一个字符数组)

代码如下👇🏻

package FileReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo1 {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fr = new FileReader("b.txt");
		char[] chs = new char[1024];
		int len = 0;
		while ((len = fr.read(chs)) != -1) {
			System.out.print(new String(chs, 0, len));
		}
		fr.close();
	}
}

🌺学习编程需要勤加练习,勇于实践,建议大家亲自动手实践练习,这样才能不断进步,掌握编程技巧,欢迎大家在评论区进行讨论。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年11月13日
下一篇 2023年11月13日

相关推荐