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