Java IO操作 字节流&字符流

参考 字节流与字符流的区别详解

1.基本概念

:程序通过流来传输和保存数据 程序的输入输出都是以流的方式,流里保存的是字节。

Java IO通过Stream(流)来实现。Java中定义了两种类型的流:字节型,和字符型。 关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。

输入流 和 输出流:程序 需要数据的时候,通过输入流来获取数据。程序 需要保存数据的时候,通过输出流保存数据。输入流和输出流是相对程序而言,程序需要数据就需要输入流,程序保存数据 相对程序来说是是输出数据 就需要输出流。

字节流和字符流: 在java.io包中 操作文件内容主要有两大类:字节流和字符流。 字节流常用来操作 图片,音频,视频等。字符流长用来操作含有中文的文件。 

在字节流中,输入和输出是使用InputStream和OutStream完成的。

在字符流中,输入和输出是Reader类和Writer类完成的。

 

2.java IO 操作的步骤:

1.创建文件: 根据文件路径 创建文件和文件夹

2.打开输入输出流: 如果是保存文件,根据文件打开输出流;如果是读取文件,根据文件打开输入流

3.读取操作: 这一步需要用到byte[] 数组。如果是保存文件,就把要保存的内容转换成byte[] 数组,然后把byte[] 数组写入输出流。 如果是读取文件,就new 一个byte[] 数组,然后通过输入流 把要读取的文件内容读取到byte[] 数组。

4.关闭输入输出流。

 

3.字节流 byte  IO操作

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.junit.Test;

public class IOTest {

	// 字节数组 写的时候,把待保存的文件转化为字节数组,然后把字节数组写入输出流。
	// 字节数组 读的时候 创建一个空的字节数组,把要读取的文件,读入字节数组

	@Test
	public void readFileByStream() throws IOException {
		// 1.创建文件
		File file = new File("D:/xml/file/test.txt");
		if (file.exists()) {
			// 2.打开输入输出流---根据文件打开输入流
			InputStream inputStream = new FileInputStream(file);

			// 3.读写操作---把要读的文件 读取到字节数组里
			byte[] b = new byte[(int) file.length()];
			int len = inputStream.read(b);

			// 4.关闭输入出处流
			inputStream.close();
			System.out.println(new String(b));
		}
	}

	@Test
	public void saveFileByStream() throws IOException {

		//1.创建文件 
	    String folderPath = "D:/xml/file";
	    File folder = new File(folderPath);
	    if(!folder.exists()){
	    	folder.mkdirs();
	    }
	    File file = new File("D:/xml/file/test.txt");
	   
		//2.打开输入输出流--- 根据要保存的文件 创建文件输出流
	    OutputStream outputStream = new FileOutputStream(file);
	    
		//3.读写操作:  把要保存的内存转化到byte数组,然后以字节的方法 把字节数组输出到输出流 
	    String str = "haaaaaaaa";
	    outputStream.write(str.getBytes());
	    
		//4.关闭输入输出流
	    outputStream.close();
	}
}

4.字符流 IO操作 

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

import org.junit.Test;

public class IOTest {

	@Test
	public void saveFileByChar() throws IOException {
		// 1.创建文件
		String folderPath = "D:/xml/file";
		File folder = new File(folderPath);
		if (!folder.exists()) {
			folder.mkdirs();
		}
		File file = new File("D:/xml/file/testChar.txt");

		// 2.打开输入输出流: 根据文件打出输出流
		Writer writer = new FileWriter(file);
		// 3.读写操作:把要保存的内容 写入到输出流
		String str = "我这次真的有点纠结了!";
		writer.write(str);
		// 4.关闭输入输出流
		writer.close();
	}

	@Test
	public void readFileByChar() throws IOException {
		// 1.创建文件
		File file = new File("D:/xml/file/testChar.txt");
		if (file.exists()) {
			// 2.打开输入输出流: 根据文件打开输入流
			Reader reader = new FileReader(file);
			// 3.读写操作:把要读取的内容 读取到输入流
			char[] c = new char[(int) file.length()];
			reader.read(c);
			System.out.println(new String(c));
			// 4.关闭输入输出流
			reader.close();
		}
	}
}

5.字节流和字符路的区别:

1.字节流 是byte 字节来传输的,字符流是by 字符的。如果对是中文字符操作,最好用字符流

2.字节流是没有用到缓存区的直接对文件操作,所以即使没有即使关闭资源 outputstream.close() ,也可以输出内容。

字符流是用了缓存区的,如果没有及时关闭资源,不会有内存输出。但是如果没有关闭资源,通过flush() 强制刷新缓存,也可以输出内容。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;

import org.junit.Test;

public class IOTest {

	@Test
	public void saveFileByStream() throws IOException {

		String folderPath = "D:/xml/file";
		File folder = new File(folderPath);
		if (!folder.exists()) {
			folder.mkdirs();
		}
		File file = new File("D:/xml/file/test1.txt");

		OutputStream outputStream = new FileOutputStream(file);

		String str = "haaaaaaaa";
		outputStream.write(str.getBytes());

		// 4.关闭输入输出流 这样文件里也有内容
		// outputStream.close();
	}

	@Test
	public void saveFileByChar() throws IOException {

		String folderPath = "D:/xml/file";
		File folder = new File(folderPath);
		if (!folder.exists()) {
			folder.mkdirs();
		}
		File file = new File("D:/xml/file/testchar1.txt");

		Writer writer = new FileWriter(file);

		String str = "haaaaaaaa";
		writer.write(str);

		// 4.关闭输入输出流		
		//writer.close(); //这样testchar1.txt文件里 没有内容
		//writer.flush(); //强制刷新缓存也 可以输出内容
	}
}

 

你可能感兴趣的:(java)