Java中IO流

100 阅读4分钟

目录

一、在Java中IO流分类

二、字节流FileOutputStream写出数据

三、字节流FileInputStream读入数据

四、字节缓冲输出流BufferedOutputStream

五、字节缓冲输入流BufferedInputStream

六、字符流OutputStreamWriter写出数据:

七、字符流InputStreamReader读入数据:

七、字符缓冲输出流BufferedWriter:

八、字符缓冲输入流BufferedReader:


一、在Java中IO流分类

 按数据类型分
字节流(字节输入流和字节输出流)
字符流(字符输入流和字符输出流)

按流向分(站在Java程序的角度分,对Java语言来说,往文件里写内容,就相当于写出数据)
输入流(读入数据)
输出流(写出数据)

二、字节流FileOutputStream写出数据

package com.hezhiying;

import java.io.FileOutputStream;

public class Main {

	public static void main(String[] args) throws Exception {
		FileOutputStream fos = new FileOutputStream("E:\\a.txt");//创建字节输出流对象
		fos.write("hello".getBytes());//调用write()方法
		fos.close();//释放资源
	}
}

运行结果:

三、字节流FileInputStream读入数据

package com.hezhiying;

import java.io.FileInputStream;

public class Main {

	public static void main(String[] args) throws Exception {

		FileInputStream fis1 = new FileInputStream("E:\\a.txt");// 创建字节输入流对象

		// 用单字节进行读取
		int x = 0;
		while ((x = fis1.read()) != -1) {
			System.out.print((char) x);
		}
		fis1.close();// 释放资源

		FileInputStream fis2 = new FileInputStream("E:\\a.txt");// 创建字节输入流对象
		// 用字节数组进行读取
		byte[] b = new byte[1024];
		int len = 0;
		while ((len = fis2.read(b)) != -1) {
			System.out.print(new String(b, 0, len));
		}
		fis2.close();// 释放资源
	}
}

运行结果:

其中第二种方法理论上是第一种的1024倍,当然了达不到

在Java中,还有一个高效字节流,这个方法比上面那个要快很多

四、字节缓冲输出流BufferedOutputStream

package com.hezhiying;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\a.txt"));

		bos.write("hello".getBytes());// 调用write()方法
		bos.close();// 释放资源s
	}
}

运行结果:

五、字节缓冲输入流BufferedInputStream

package com.hezhiying;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class Main {

	public static void main(String[] args) throws Exception {

		BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("E:\\a.txt"));
		// 用单字节进行读取
		int x = 0;
		while ((x = bis1.read()) != -1) {
			System.out.print((char) x);
		}
		bis1.close();// 释放资源

		BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream("E:\\a.txt"));
		// 用字节数组进行读取
		byte[] b = new byte[1024];
		int len = 0;
		while ((len = bis2.read(b)) != -1) {
			System.out.print(new String(b, 0, len));
		}
		bis2.close();// 释放资源
	}
}

运行结果:

六、字符流OutputStreamWriter写出数据:

字符流=字节流+编码表,ASCII,UTF-8,GBK等都是编码表,字符流跟字节流很相像,下面只讲解字符流特有的功能

代码:

package com.hezhiying;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws Exception {

		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"));
		
		//这是写单个字符
		osw.write('a');
		

		//这是写一个字符数组
		char[] chs1 = {'a','b','c'};
		osw.write(chs1);
		
		//这是写一个字符数组的一部分
		char[] chs2 = {'a','b','c','d'};
		osw.write(chs2,1,2);
		
		//这是写一个字符串
		osw.write("hello");
		
		//这是写一个字符串的一部分
		osw.write("hello",1,2);
		
		osw.flush();
		osw.close();
		
	}
}

运行结果:

七、字符流InputStreamReader读入数据:

代码:

package com.hezhiying;

import java.io.FileInputStream;

import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws Exception {

		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

		// 这是一次读取一个字符
		int ch = 0;
		while ((ch = isr.read()) != -1) {
			System.out.println((char) ch);
		}

		InputStreamReader isr1 = new InputStreamReader(new FileInputStream("a.txt"));
		// 这是一次读取一个字符数组
		char[] chs = new char[1024];
		int len = 0;
		while ((len = isr1.read(chs)) != -1) {
			System.out.print(new String(chs,0,len));
		}
		isr1.close();
		isr.close();
	}
}

运行结果:

七、字符缓冲输出流BufferedWriter:

代码:

package com.hezhiying;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
		
		bw.write("hello");
		bw.flush();
		bw.close();
		
	}
}

运行结果:

八、字符缓冲输入流BufferedReader:

代码:

package com.hezhiying;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {

	public static void main(String[] args) throws IOException {
		// 创建字符缓冲输入流
		BufferedReader br = new BufferedReader(new FileReader("a.txt"));

		// 这是一次读取一个字符
		int ch = 0;
		while ((ch = br.read()) != -1) {
			System.out.println((char) ch);
		}
		
		BufferedReader br1 = new BufferedReader(new FileReader("a.txt"));
		char[] chs = new char[1024];
		int len=0;
		while((len=br1.read(chs))!=-1) {
			System.out.println(new String(chs,0,len));
		}
		br1.close();
		br.close();
	}
}

运行结果: