IO流-字符流

转换流OutputStreamWriter的使用

package outputstreamwriter;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
 
/*
 * 转换流OutputStreamWriter的使用
 * 
 * OutputStream(OutputStream out):根据默认的编码把字节流数据转换为字符流
 * OutputStream(OutputStream out,String charsetName):根据指定的编码把字节流数据转换为字符流
 * 把字节流转换为字符流
 * 字符流=字节流+编码表
 */
public class OutputStreamWriterDemo {
	public static void main(String[] args) throws IOException {
		// 创建字节流转换为字符流对象输出流
		// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
		// "osw.txt"));//默认GBK
		// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
		// "osw.txt"), "GBK");// 指定GBK
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
				"osw.txt"), "UTF-8");// 指定UTF-8
		// 写数据
		osw.write("中国");
 
		// 释放资源
		osw.close();
	}
}

转换流InputStreamReader的使用

package inputstreamreader;

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

/*
 * 转换流InputStreamReader的使用
 * 
 * InputStreamReader(InputStream is):用默认编码读取数据
 * InputStreamReader(InputStream is,String charsetName):用指定编码读取数据
 */
public class InputStreamReaderDemo {
	public static void main(String[] args) throws IOException {
		// 创建对象
		// InputStreamReader isr = new InputStreamReader(new FileInputStream(
		// "osw.txt"));
		InputStreamReader isr = new InputStreamReader(new FileInputStream(
				"osw.txt"), "UTF-8");

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

		// 释放资源
		isr.close();
	}
}

字符流中OutputStreamWriter的五个writer()方法:

package outputstreamwriter;

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

/*
 * 字符流中OutputStreamWriter的五个writer()方法:
 * 
 * OutputStreamWriter的方法:
 * 		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):写一个字符串的一部分
 * 
 * 面试题:
 * 		close和flush()的区别?
 * 			A:close关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
 * 			B:flush仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。
 */
public class OutputStreamWriterDemo2 {
	public static void main(String[] args) throws IOException {
		// 创建对象
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
				"osw2.txt"));

		// 写数据
		// public void write(int c):写一个字符
		// osw.write('a');
		// osw.write(97);
		// 为什么数据没有进去呢?
		// 原因是:字符=2字节
		// 文件中数据存储的基本单位是字节

		// 刷新缓冲区(ps:两个人同时通过一个容量只能出一个人的门,flush相当于后面有人踹一脚)
		// void flush();
		// osw.flush();

		// public void write(char[] cbuf):写一个字符数组
		// char[] chs = { 'a', 'b', 'c', 'd', 'e' };
		// osw.write(chs);

		// public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
		// osw.write(chs, 1, 3);

		// public void write(String str):写一个字符串
		// osw.write("我爱花千骨");

		// public void wirte(String str,int off,int len):写一个字符串的一部分
		osw.write("我爱花千骨", 2, 3);

		// 释放资源
		osw.close();
	}
}

字符流中InputStreamReader的两个read()方法:

package inputstreamreader;

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

/*
 * 字符流中InputStreamReader的两个read()方法:
 * 
 * InputStreamReader的方法:
 * 		int read():一次读取一个字符
 * 		int read(char[] chs):一次读取一个字符数组
 */
public class InputStreamReaderDemo2 {
	public static void main(String[] args) throws IOException {
		// 创建 对象
		InputStreamReader isr = new InputStreamReader(new FileInputStream(
				"StringDemo.java"));

		// 读取数据
		// int read():一次读取一个字符
		// int ch = 0;
		// while ((ch = isr.read()) != -1) {
		// System.out.print((char) ch);
		// }

		// int read(char[] chs):一次读取一个字符数组
		char[] chs = new char[1024];
		int ch = 0;
		while ((ch = isr.read(chs)) != -1) {
			System.out.print(new String(chs, 0, ch));
		}

		// 释放资源
		isr.close();
	}
}

FileWriter

package outputstreamwriter;

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

/*
 * FileWriter
 * 
 * 由于我们常见的操作都是使用本地默认编码,所以不用指定编码。
 * 而转换流的名称有点长,所以,Java就给我们提供其子类供我们使用。
 * OutputStreamWriter = FileOutputStream + 编码表(GBK)
 * FileWriter = OutputStreamWriter
 * 
 * InputStreamReader = FileInputStream + 编码表(GBK)
 * FileReader = InputStreamReader
 * 
 * 需求:把当前项目目录下的a.txt内容复制到当前项目目录中b.txt中
 * 
 * 数据源:
 * 		a.txt	--	读取数据	--	字符转换流	--	InputStreamReader	--	FileReader
 * 目的地:	
 * 		b.txt	--	读出数据	--	字符转换流	--	OutputStreamWriter	--	FileWriter
 */
public class FileWriter {
	public static void main(String[] args) throws IOException {
		// 封装数据源对象
		FileReader fr = new FileReader("a.txt");
		// 封装目的地对象
		FileWriter fw = new FileWriter("b.txt");

		// 读写数据
		// 方式1
		// 一次读写一个字符
		// int len = 0;
		// while ((len = fr.read()) != -1) {
		// fw.write(len);
		// }

		// 方式2
		// 一次读写一个字符数组
		char[] chs = new char[1024];
		int len = 0;
		while ((len = fr.read(chs)) != -1) {
			fw.write(chs, 0, len);
			fw.flush();
		}

		// 释放资源
		fw.close();
		fr.close();
	}
}

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41690324/article/details/81592088
个人分类: IO流
上一篇IO流-String类中的编码和解码问题
下一篇IO流-字符缓冲流
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭