前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >转换流

转换流

作者头像
星哥玩云
发布2022-09-14 20:10:56
发布2022-09-14 20:10:56
20300
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

1、转换流概述

OutputStreamWriter 字符输出流 public OutputStreamWriter(OutputStream out) public OutputStreamWriter(OutputStream out,String charsetName) InputStreamReader 字符输入流 public InputStreamReader(InputStream in) public InputStreamReader(InputStream in,String charsetName)

转换流读数据

代码语言:javascript
代码运行次数:0
运行
复制
	public static void main(String[] args) throws IOException {
		// 创建对象
		// InputStreamReader isr = 
        //new InputStreamReader(new FileInputStream("osw.txt"));

		// InputStreamReader isr = 
        //new InputStreamReader(new FileInputStream("osw.txt"), "GBK");

		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();
	}

转换流写数据

代码语言:javascript
代码运行次数:0
运行
复制
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();
}

2、OutputStreamWriter写数据

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) 字符流操作要注意的问题 flush()的作用 flush()和close()的区别public static void main(String[] args) throws IOException { // 创建对象 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( “osw2.txt”));

代码语言:javascript
代码运行次数:0
运行
复制
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字节
	// 文件中数据存储的基本单位是字节。
	// void 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 write(String str,int off,int len):写一个字符串的一部分
	osw.write("我爱林青霞", 2, 3);

	// 刷新缓冲区
	osw.flush();
	// osw.write("我爱林青霞", 2, 3);

	// 释放资源
	osw.close();
	// java.io.IOException: Stream closed
	// osw.write("我爱林青霞", 2, 3);
}

3、InputStreamReader读数据

InputStreamReader读数据方法 public int read() public int read(char[] cbuf)

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) throws IOException {
		// 创建对象
		InputStreamReader isr = 
            new InputStreamReader(new FileInputStream(
				"StringDemo.java"));

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

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

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

4、字符流复制文本文件

把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 把c:\a.txt内容复制到d:\b.txt中

代码语言:javascript
代码运行次数:0
运行
复制
/*
 * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
 * 
 * 数据源:
 * 		a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader
 * 目的地:
 * 		b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter
 */
public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据源
		InputStreamReader isr = new InputStreamReader(
			new FileInputStream("a.txt"));
		// 封装目的地
		OutputStreamWriter osw = 
			new OutputStreamWriter(
			new FileOutputStream("b.txt"));
		// 读写数据
		// 方式1
		// int ch = 0;
		// while ((ch = isr.read()) != -1) {
		// osw.write(ch);
		// }
		// 方式2
		char[] chs = new char[1024];
		int len = 0;
		while ((len = isr.read(chs)) != -1) {
			osw.write(chs, 0, len);
			// osw.flush();
		}
		// 释放资源
		osw.close();
		isr.close();
	}
}

5、转换流的简化写法

转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。 FileWriter FileReader

OutputStreamWriter = FileOutputStream + 编码表(GBK)

FileWriter = FileOutputStream + 编码表(GBK)

InputStreamReader = FileInputStream + 编码表(GBK)

FileReader = FileInputStream + 编码表(GBK)

正常的字符流是需要对字节流进行包装的,而便捷字符流不需要我们手动进行字节流的包装,只要给文件路径字符串就可以了。

代码语言:javascript
代码运行次数:0
运行
复制
	public static void main(String[] args) throws IOException {
		// 封装数据源
		FileReader fr = new FileReader("a.txt");
		// 封装目的地
		FileWriter fw = new FileWriter("b.txt");

		// 一次一个字符
		// int ch = 0;
		// while ((ch = fr.read()) != -1) {
		// fw.write(ch);
		// }

		// 一次一个字符数组
		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();
	}

6、FileWriter和FileReader

FileWriter写数据 FileReader读取数据 FileWriter和FileReader实现文本文件的复制

代码语言:javascript
代码运行次数:0
运行
复制
	public static void main(String[] args) throws IOException {
		// 封装数据源
		FileReader fr = new FileReader("a.txt");
		// 封装目的地
		FileWriter fw = new FileWriter("b.txt");

		// 一次一个字符
		// int ch = 0;
		// while ((ch = fr.read()) != -1) {
		// fw.write(ch);
		// }

		// 一次一个字符数组
		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();
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、转换流概述
  • 2、OutputStreamWriter写数据
  • 3、InputStreamReader读数据
  • 4、字符流复制文本文件
  • 5、转换流的简化写法
    • 6、FileWriter和FileReader
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档