JavaIO流(day3)

本文介绍如何使用Java IO流实现文本文件拷贝、添加行号等功能,并演示字符缓冲流、转换流及字节数组流的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习内容:

  1. 使用字符流实现文本文件的拷贝处理
  2. 字符输入/输出缓冲流
  3. 通过字符缓冲流实现文本文件的拷贝
  4. 通过字符缓冲流为文件中的内容添加行号
  5. 通过转换流实现键盘输入和屏幕输出
  6. 通过字节流读取文本文件并添加行号
  7. 字符输出流PrintWrite
  8. 字节数组输入/输出流

学习笔记:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值