学习内容:
- 使用字符流实现文本文件的拷贝处理
- 字符输入/输出缓冲流
- 通过字符缓冲流实现文本文件的拷贝
- 通过字符缓冲流为文件中的内容添加行号
- 通过转换流实现键盘输入和屏幕输出
- 通过字节流读取文本文件并添加行号
- 字符输出流PrintWrite
- 字节数组输入/输出流
学习笔记:
1. 使用字符流实现文本文件的拷贝处理
import java.io.FileReader;
import java.io.FileWriter;
public class day3 {
public static void main(String[] args) throws Exception{
FileReader fr = null;
FileWriter fw = null;
fr = new FileReader("d:/剧本杀/新手剧本/2 在人间(6人开放)/组织者手册.docx");
fw = new FileWriter("d:/ee.txt");
char[] buffer = new char [1024];//创建缓冲区加快效率,数组长度只能自己决定,不能像byte一样。
int temp = 0;
while ((temp = fr.read(buffer)) != -1 ) {
fw.write(buffer,0,temp);
}
fw.flush();
if(fr != null) {
fr.close();
}
if(fw != null) {
fw.close();
}
}
}
2.字符输入/输出缓冲流
输入:
import java.io.BufferedReader;
import java.io.FileReader;
public class BufferedReaderDemo {
public static void main(String[] args) throws Exception{
FileReader fr = null;
BufferedReader br = null;
fr = new FileReader("d:/hello.txt");
br = new BufferedReader(fr);
String temp = " ";//因为是字符,所以定义String而不是int
while((temp = br.readLine()) !=null) {//因为是字符,则应当是!= null而不是!= -1了
System.out.println(temp);
}
if(br != null) {
br.close();
}
if(fr != null) {
fr.close();
}
}
}
输出结果:
哈喽
世界
何以解忧
唯有杜康
输出:
import java.io.BufferedWriter;
import java.io.FileWriter;
public class BufferedWriterDemo {
public static void main(String[] args) throws Exception{
FileWriter fw = null;
BufferedWriter bw = null;
fw = new FileWriter("d:/aa2.txt");
bw = new BufferedWriter (fw);
bw.write("你好");
bw.write("世界");
bw.newLine();//换行
bw.write("何以解忧");
bw.newLine();
bw.write("唯有杜康");
bw.newLine();
if (bw != null) {
bw.close();
}
if (fw !=null) {
bw.close();
}
}
}
输出结果:
你好世界
何以解忧
唯有杜康
3.通过字符缓冲流实现文本文件的拷贝
public static void main(String[] args) {
try {
copyFile("d:/hello.txt","d:/hello2.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 基于字符缓冲流实现文件拷贝
*/
public static void copyFile(String src,String des) throws Exception{
BufferedReader br = null;
BufferedWriter bw = null;
br = new BufferedReader(new FileReader(src));
bw = new BufferedWriter(new FileWriter(des));
String temp = " ";
while ((temp = br.readLine()) !=null) {
bw.write(temp);
bw.newLine();
}
bw.flush();
if(br != null) {
br.close();
}
if(bw !=null) {
bw.close();
}
}
}
4.通过字符缓冲流为文件中的内容添加行号
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
public class LineNumberDemo {
public static void main(String[] args) throws Exception {
BufferedReader br = null;
BufferedWriter bw = null;
br = new BufferedReader (new FileReader("d:/hello2.txt"));
bw = new BufferedWriter(new FileWriter("d:/hello3.txt"));
String temp = " ";
int i = 1;
while ((temp = br.readLine()) !=null) {
bw.write(i+","+temp);
bw.newLine();
i++;
}
bw.flush();
if(bw != null) {
bw.close();
}
if(br !=null) {
br.close();
}
}
}
输出结果:
1,哈喽
2,世界
3,何以解忧
4,唯有杜康
5.通过转换流实现键盘输入和屏幕输出
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ConvertStream {
public static void main(String[] args) throws Exception {
BufferedReader br = null;
BufferedWriter bw = null;
br = new BufferedReader(new InputStreamReader(System.in));//嵌套键盘输入
bw = new BufferedWriter(new OutputStreamWriter(System.out));//嵌套屏幕输出
while (true) {
bw.write("请输入");
bw.flush();
String input = br.readLine();
if("exit".equals(input)) {
break;//输入exit则退出循环
}
bw.write("您输入的是:"+input);
bw.newLine();
bw.flush();
}
if(bw !=null) {
bw.close();
}
if(br !=null) {
br.close();
}
}
}
输出结果:
请输入你好世界
您输入的是:你好世界
请输入何以解忧
您输入的是:何以解忧
请输入唯有杜康
您输入的是:唯有杜康
请输入exit
6.通过字节流读取文本文件并添加行号
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class LineNumberDemo2 {
public static void main(String[] args) throws Exception{
// 通过字节流读取文本文件并添加行号
BufferedReader br = null;
BufferedWriter bw = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/hello.txt")));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/hello4.txt")));//通过转换流使得字符和字节可以进行转换
String temp = " ";
int i = 1;
while((temp = br.readLine()) !=null) {
bw.write(i+","+temp);
bw.newLine();
i++;
}
bw.flush();
if (br != null) {
br.close();
}
if (bw != null) {
bw.close();
}
}
}
输出结果
1,哈喽
2,世界
3,何以解忧
4,唯有杜康
7.字符输出流PrintWriter
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class LineNumberDemo3 {
public static void main(String[] args) throws Exception {
//字节转字符
BufferedReader br = null;
PrintWriter pw = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/hello.txt")));
pw = new PrintWriter("d:/hello5.txt");
String temp =" ";
int i = 1;
while((temp = br.readLine()) != null) {
pw.println(i+","+temp);
i++;
}
if(br !=null) {
br.close();
}
if(pw !=null) {
pw.close();
}
}
}
输出结果:
1,哈喽
2,世界
3,何以解忧
4,唯有杜康
ps:在JavaIO流中,不管是字节输入还是字符输入,最后的输出并不一定要求相同,但是如果不同的话需要使用转换流在途中进行转换。
8.字节数组输入/输出流
输入:
import java.io.ByteArrayInputStream;
public class ByteArrayInputDemo {
public static void main(String[] args) throws Exception {
// 字节数组 输入
byte[] arr = "abcdefg".getBytes();
ByteArrayInputStream bis = null;
StringBuilder sb = new StringBuilder();
bis = new ByteArrayInputStream(arr);//该构造方法的参数是一个字节数组,这个字节数组就是数据源
int temp = 0;
while((temp = bis.read()) != -1) {
sb.append((char)temp);
}
System.out.println(sb.toString());
bis.close();
}
}
输出结果:
abcdefg
输出:
import java.io.ByteArrayOutputStream;
public class ByteArrayOutputDemo {
public static void main(String[] args) throws Exception {
ByteArrayOutputStream bos = null;
StringBuilder sb = new StringBuilder();
bos = new ByteArrayOutputStream();
bos.write('a');
bos.write('b');
bos.write('c');
byte [] arr = bos.toByteArray();
for(int i = 0 ;i < arr.length;i++){
//System.out.println(arr[i]);输出值
sb.append((char)arr[i]);
}
System.out.println(sb.toString());//通过转换输出字符
if(bos !=null) {
bos.close();
}
}
}
输出:
abc