IO流的【字符流】

IO流的【字符流】

字符流:字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的。字符流操作的是缓冲区(当我们对文件进行读写操作时如果不调用close() 或 flush()方法时不能看到数据的变化)。

(一)、字符输入流

将磁盘(文件)中的数据读入内存中


Reader 是所有的输入字符流的父类,它是一个抽象类。

package com.superb.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TestReaderOrWrite {

	public static void main(String[] args) throws IOException {
		// OutputStreamWriter();
		// FileWriter();
		// BufferedWriter();
		copy4();
	}

	/***
	 * OutputStreamWriter 将内存中的数据写入文件的5中方式如下:
	 * 
	 * 写入结果:ac
	 * 
	 * @throws IOException
	 */
	// 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
	static void OutputStreamWriter() throws IOException {
		java.io.OutputStreamWriter writer = new java.io.OutputStreamWriter(
				new FileOutputStream(new File("F:\\java\\io\\test\\iiiiii.txt")));

		// 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
		writer.write(97);
		writer.write('c');
		writer.write("\r\n");

		// 写入字符数组
		char[] c = new char[] { '我', '是', '爹' };
		writer.write(c);
		writer.write("\r\n");

		// 写入字符数组的某一部分。
		writer.write(c, 0, 2);
		writer.write("\r\n");

		// 写入字符串
		String str = "嘻嘻哈哈";
		writer.write(str);
		writer.write("\r\n");

		// 写入字符串的某一部分。
		writer.write(str, 0, 2);

		writer.flush();
		writer.close();
	}

	/**
	 * FileWriter:类从OutputStreamWriter类继承而来。该类按字符向流中写入数据,可以关联源文件。主要够造函数:
	 * 
	 * @throws IOException
	 */
	static void FileWriter() throws IOException {
		String fileName = "F:\\java\\io\\test\\iiiiii.txt";
		// 创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。
		// 如:FileWriter fw = new
		// FileWriter("C:\\demo.txt");
		FileWriter fw = new FileWriter(fileName);

		// 创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写。
		// 如:FileWriter fw = new FileWriter("C:\\demo.txt",ture);
		// //表示在fw对文件再次写入时,会在该文件的结尾续写,并不会覆盖掉。

		FileWriter fw1 = new FileWriter(fileName, true);

		fw.write("fileWirter天假");
		fw1.write("----后面追加");
		fw.flush();
		fw1.flush();
		fw.close();
		fw1.close();
	}

	/**
	 * BufferedWriter(缓冲流):字节输出缓冲流,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
	 * 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 该类提供了 newLine()
	 * 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator
	 * 定义。该类写入文本的方法就是父类Writer提供的write()系列方法,在这里我们演示他特有的newLine( )方法。
	 * 
	 * @throws IOException
	 */
	static void BufferedWriter() throws IOException {
		BufferedWriter bw = new java.io.BufferedWriter(new FileWriter(new File("F:\\java\\io\\test\\iiiiii.txt")));

		bw.write("我的哈哈哈哈哈");

		bw.newLine();

		bw.write("换到下一行");

		bw.flush();

		bw.close();
	}

	// copy文件的几种方式

	/**
	 * 使用转换流copy文件: 在这里使用了指定编码方式的对象,一般我们使用平台默认编码方式的够造函数创建对象 
* InputStreamReader 与 OutputStreamWriter读写 * * @throws IOException */ static void copy1() throws IOException { InputStreamReader reader = new InputStreamReader( new FileInputStream(new File("F:\\java\\io\\test\\iiiiii.txt"))); OutputStreamWriter writer = new java.io.OutputStreamWriter( new FileOutputStream(new File("F:\\java\\io\\test\\pppppp.txt"))); int len = 0; // 逐个读写 // while ((len = reader.read()) != -1) { // writer.write((char) len); // } // 缓冲读写 char[] c = new char[1024]; while ((len = reader.read(c)) != -1) { writer.write(c, 0, len); writer.flush(); } writer.flush(); writer.close(); reader.close(); } /** * 使用关联源文件的字符流copy文件: * * @throws IOException * FileReader 与 FileWriter 读写 * */ static void copy2() throws IOException { FileReader reader = new FileReader(new File("F:\\java\\io\\test\\iiiiii.txt")); FileWriter writer = new FileWriter(new File("F:\\java\\io\\test\\bbbbbbbbb.txt")); char[] c = new char[1024]; int len = 0; while ((len = reader.read(c)) != -1) { writer.write(c, 0, len); writer.flush(); } writer.close(); } /** * 使用缓冲流特定的行方法(readLine(),newLine() )实现文件的copy * * @throws IOException */ static void copy3() throws IOException { BufferedReader br = new BufferedReader(new FileReader(new File("F:\\java\\io\\test\\iiiiii.txt"))); BufferedWriter wr = new BufferedWriter(new FileWriter(new File("F:\\java\\io\\test\\mmmmmmmmm.txt"))); String str = null; while ((str = br.readLine()) != null) { wr.write(str); wr.newLine(); wr.flush(); } wr.close(); br.close(); } /** * 字节缓冲流+源文件字符流实现文件copy * * @throws IOException */ static void copy4() throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(new File("F:\\java\\io\\test\\iiiiii.txt")))); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(new File("F:\\java\\io\\test\\hhhhhhhh.txt")))); int len = 0; char[] c = new char[1024]; while ((len = br.read(c)) != -1) { bw.write(c, 0, len); bw.flush(); } bw.close(); br.close(); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值