IO流-字符流2
IO流-字符流2
字符流写数据的5种方法


构造方法:
OutputStreamWriter(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter 写数据的5种方式:
void write (int c): 写一个字符
void write (char[] cbuf): 写入一个字符数组
void write(char[] cbuf,int off,int len): 写入字符数组的一部分 void write (String str):写一个字符串
void write (String str,int off,int len): 写一个字符串的一部分
*/
package IO.StringStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Writer_5Method {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java.txt"));
//void write (int c): 写一个字符
// osw.write(97); // 写入字符a
osw.flush(); // void flush(); 刷新方法 只有刷新后才能写入文件
//void write (char[] cbuf): 写入一个字符数组
char[] c = {'a', 'b', 'c', 'd', 'e'}; //char数组
osw.write(c); // 写入字符数组
//void write(char[] cbuf,int off,int len): 写入字符数组的一部分 void write (String str):写一个字符串
osw.write("\r\n"); //换行
osw.write(c, 1, 3); //参数为数组, 从off开始,写len个数据
//void write (String str): 写一个字符串
osw.write("ABCDE");
//void write (String str,int off,int len): 写一个字符串的一部分
osw.write("\r\n");
osw.write("今天天气不错!",0,3); //从0开始,写入3个字符. 控制台输出: 今天天
osw.close(); // close方法先执行flush方法刷新流再关闭资源.
}
}

构造方法:
InputStreamReader(InputStream in):创建一个默认字符集的ISR对象
读数据的两种方式:
int read(): 一次读一个字节数据
int read ( char [] cbuf ): 一次读一个字节数组数据
*/
package IO.StringStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class Reader_2Method {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("d:\\Cat.txt"));
//int read(): 一次读一个字节数据
int cha;
// while((cha=isr.read())!=-1){
// System.out.print((char)cha );
// }
//int read ( char [] cbuf ): 一次读一个字节数组数据
char [] bytes = new char[1024]; //这里需要字符数组
int len;
while((len=isr.read(bytes))!=-1){
System.out.print(new String(bytes,0,len));
}
isr.close();
}
}
案例: 复制java文件
思路:
1. 根据数据源创建字符输入流
2. 根据目的地创建字符输出流
3. 读写数据, 复制文件
4. 释放资源
*/
package IO.StringStream;
import java.io.*;
public class CopyStringFile {
public static void main(String[] args) throws IOException {
//1. 根据数据源创建字符输入流
InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\src\\IO\\StringStream\\Writer_5Method.java"));
//2. 根据目的地创建字符输出流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("5M.java"));
//3. 读写数据, 复制文件 标准格式
//一次一个字符
int ch;
while ((ch=isr.read())!=-1){
osw.write(ch);
}
//一次一个字符数组
char [] chars = new char[1024];
int len;
while ((len=isr.read(chars))!=-1){
osw.write(chars,0,len);
}
//4. 释放资源
isr.close();
osw.close();
}
}
案例: 复制java文件(改进版)

如果在程序中涉及到解码,编码问题还要使用InputStreamReader 和 OutputStreamWriter 类.
思路:
1. 根据数据源创建字符输入流
2. 根据目的地创建字符输出流
3. 读写数据, 复制文件
4. 释放资源
*/
package IO.StringStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class NewCopyStringFile {
public static void main(String[] args) throws IOException {
//1. 根据数据源创建字符输入流
FileReader fr = new FileReader("5M.java");
//2. 根据目的地创建字符输出流
FileWriter fw = new FileWriter("5M.txt");
//3. 读写数据, 复制文件
//(1)一个字符
// int ch;
// while ((ch=fr.read())!=-1){
// fw.write(ch);
// }
//(2)一个字符数组
char [] chars = new char[1024];
int len;
while ((len=fr.read(chars))!=-1){
fw.write(chars,0,len);
}
//4. 释放资源
fr.close();
fw.close();
}
}

BufferedReader (Reader in)
BufferedWriter (Writer out)
*/
package IO.StringStream;
import java.io.*;
public class StringBuffered {
public static void main(String[] args) throws IOException {
//创建字符输入缓冲流
BufferedReader br = new BufferedReader(new FileReader("java.txt"));
//读取数据,在控制台输出, 标准格式
//(1)
int ch;
while ((ch=br.read())!=-1){
System.out.print((char)ch);
}
//(2)
char[] chars = new char[1024];
int len;
while ((len = br.read(chars)) != -1) {
System.out.print(new String(chars, 0, len));
}
//释放资源
br.close();
}
}
案例: 复制Java文件(字节缓冲流改进版)
思路:
1. 根据数据源创建字符输入流
2. 根据目的地创建字符输出流
3. 读写数据, 复制文件
4. 释放资源
*/
package IO.StringStream;
import java.io.*;
public class StringBuffered_2 {
public static void main(String[] args) throws IOException {
//1. 根据数据源创建字符输入流
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\src\\IO\\StringStream\\StringBuffered.java"));
//2. 根据目的地创建字符输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("StringBufferedCopy.java"));
//3. 读写数据, 复制文件
//(1)字节
int ch;
while ((ch=br.read())!=-1){
bw.write(ch);
}
//(2)数组
char [] chars = new char[1024];
int len;
while ((len=br.read(chars))!=-1){
bw.write(chars,0,len);
}
//4. 释放资源
br.close();
bw.close();
}
}

3.8字符缓冲流特有功能
BufferedWriter:
void newLine():写一行行分隔符,行分隔符字符串由系统属性定义
BufferedReader:
public String readLine():读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,
如果流的结尾已经到达,则为null
*/
package IO.StringStream;
import java.io.*;
public class StringBuffered_3_new {
public static void main(String[] args) throws IOException {
/*
//写字符文件的标准方法
//创建字符缓冲输出流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("NewPower.txt"));
for (int i=0; i<3;i++){
bw.write("NewPower!"+i);
// bw.write("\r\n"); //只有Windows系统能识别
bw.newLine(); //我们用newLine方法实现换行
bw.flush(); //把一行的数据刷新进文件
}
bw.close(); //释放资源
*/
//创建字符缓冲输入流对象 读取整行的字符数据的格式
BufferedReader br = new BufferedReader(new FileReader("NewPower.txt"));
//读取第1行字符
// String line1 = br.readLine();
// System.out.println(line1);
//读取第2行字符
// String line2 = br.readLine();
// System.out.println(line2);
String line; //创建字符串 用循环改进
while ((line=br.readLine())!=null){ //返回值不是Null
System.out.println(line); //输出返回值
}
br.close(); //释放资源
}
}
字符缓冲流的特有方式复制文件
import java.io.*;
//最常用的复制字符文件的方法--字符缓冲流的特有方法--标准格式
public class StringBuffered_4 {
public static void main(String[] args) throws IOException {
//根据数据源创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("d:\\2\\Cat.txt"));
//根据目的地创建字符缓冲输出流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("Cat.txt"));
//读写数据, 复制文件, 用字符缓冲流特有功能实现
String line;
while ((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
br.close();
bw.close();
}
}

浙公网安备 33010602011771号