编写一个程序,分别使用字节流和字符流拷贝一个文本文件

1.编写一个程序,分别使用字节流和字符流拷贝一个文本文件。
提示:
1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝
2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝使用使用BufferedReader和BufferedWriter包装流进行包装
开始的文本内容
这是开始的文本内容。

import java.io.*;

public class kaobei {
	public static void main(String []args) throws Exception{
		//字节流拷贝
		FileInputStream in = new FileInputStream("D:/first.txt");
		FileOutputStream out = new FileOutputStream("D:/second.txt");
		int len ;
		byte[] a = new byte[1024];
		while((len = in.read(a))!= -1) {
			out.write(a, 0, len);
		}
		in.close();
		out.close();
		//字符流拷贝
		//创建一个字符流输入缓冲流对象
		
		BufferedReader br = new BufferedReader(
				new FileReader("D:/first.txt"));
		//创建一个字符流输出缓冲流对象
		BufferedWriter bw = new BufferedWriter(
				new FileWriter("D:/second.txt"));
		/*
		 定义变量让文本的内容能够完全输出
		循环执行,直到读到最后一行
		*/
		String line2; 
		while((line2 = br.readLine())!=null) {
			bw.write(line2);
		}
				br.close();
				bw.close();
	}

}

这样的拷贝如果在文本中出现汉字,就有可能出现乱码。如下图:在这里插入图片描述
这是Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。
可以改该工程的编码格式,或者更改打开txt文件的格式来消除乱码。也可以直接规定打开的编码格式。

import java.io.*;

public class kaobei {
	public static void main(String []args) throws Exception{
		//字节流拷贝
		FileInputStream in = new FileInputStream("D:/first.txt");
		FileOutputStream out = new FileOutputStream("D:/second.txt");
		int len ;
		byte[] a = new byte[1024];
		while((len = in.read(a))!= -1) {
			out.write(a, 0, len);
		}
		in.close();
		out.close();
		//字符流拷贝
		//创建一个字符流输入缓冲流对象
		
		BufferedReader br = new BufferedReader(
				new InputStreamReader(new FileInputStream("D:/first.txt"),"GBK"));//规定编码格式,否则会乱码
		//创建一个字符流输出缓冲流对象
		BufferedWriter bw = new BufferedWriter(
				new OutputStreamWriter(new FileOutputStream("D:/second.txt"),"GBK"));//同上
		/*
		 定义变量让文本的内容能够完全输出
		循环执行,直到读到最后一行
		*/
		String line2; 
		while((line2 = br.readLine())!=null) {
			bw.write(line2);
		}
				br.close();
				bw.close();
	}

}

这样规定后就不会出现乱码,在这里插入图片描述
这是更改后的拷贝内容。

  • 15
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 使用字节流拷贝文本文件: ```java import java.io.*; public class ByteStreamCopy { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("target.txt"); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { fos.write(buffer, , len); } fis.close(); fos.close(); System.out.println("拷贝完成"); } catch (IOException e) { e.printStackTrace(); } } } ``` 使用字符流拷贝文本文件: ```java import java.io.*; public class CharacterStreamCopy { public static void main(String[] args) { try { FileReader fr = new FileReader("source.txt"); FileWriter fw = new FileWriter("target.txt"); char[] buffer = new char[1024]; int len; while ((len = fr.read(buffer)) != -1) { fw.write(buffer, , len); } fr.close(); fw.close(); System.out.println("拷贝完成"); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 回答2: 编写一个程序分别使用字节流字符流拷贝一个文本文件非常简单。以下是两种方法: ## 使用字节流拷贝文本文件 ```java import java.io.*; public class ByteStreamCopy { public static void main(String[] args) { try { File sourceFile = new File("source.txt"); File destFile = new File("dest.txt"); InputStream in = new FileInputStream(sourceFile); OutputStream out = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); System.out.println("Copy complete."); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的程序中,我们首先将源文件和目标文件创建为File对象。然后,我们使用FileInputStream和FileOutputStream创建InputStream和OutputStream对象。在这里,我们将使用缓冲区大小为1024字节。我们使用while循环读取输入流,并将读取的字节数组写入输出流。最后,我们关闭输入流和输出流。 ## 使用字符流拷贝文本文件 ```java import java.io.*; public class CharacterStreamCopy { public static void main(String[] args) { try { File sourceFile = new File("source.txt"); File destFile = new File("dest.txt"); Reader in = new FileReader(sourceFile); Writer out = new FileWriter(destFile); char[] buffer = new char[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); System.out.println("Copy complete."); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的程序中,我们使用FileReader和FileWriter创建Reader和Writer对象。我们使用一个大小为1024的字符数组,从输入流中读取字符,并将读取的字符数组写入输出流。最后,我们关闭输入流和输出流。 在这两个程序中,我们使用try-catch块来捕获可能抛出的IOException异常。这表示如果在复制过程中出现了任何异常,程序将终止,并将错误消息打印到控制台。 ### 回答3: 对于Java程序员来说,处理文件通常是操作系统的一个重要组成部分。当我们需要从一个文件拷贝数据到另一个文件时,我们通常有两种选择:使用字节流字符流来处理文件。在本文中,我将介绍如何使用这两种方法的Java代码拷贝文本文件以及它们的优缺点。 首先让我们来看看使用字节流的方式。Java中最常用的字节流类是FileInputStream和FileOutputStream。FileInputStream类用于读取文件内容,FileOutputStream类用于写入文件内容。以下是一个使用这两个类实现文件复制的Java代码: ``` import java.io.*; public class FileCopyByteStream { public static void main(String[] args) throws IOException { FileInputStream inputStream = new FileInputStream("source.txt"); FileOutputStream outputStream = new FileOutputStream("target.txt"); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } } ``` 该程序将从source.txt文件读取数据,然后将数据写入到target.txt文件。在这个程序中,我们使用了byte数组作为缓冲区来读取和写入文件数据。它是按字节操作的,适用于处理文本文件、图像或其他二进制文件。 接下来是字符流的方式。Java中最常使用字符流类是FileReader和FileWriter。FileReader类用于读取文件内容并将其转换为字符形式,而FileWriter类用于将字符写入文件。以下是一个使用这两个类实现文件复制的Java代码: ``` import java.io.*; public class FileCopyCharStream { public static void main(String[] args) throws IOException { FileReader reader = new FileReader("source.txt"); FileWriter writer = new FileWriter("target.txt"); char[] buffer = new char[1024]; int length; while ((length = reader.read(buffer)) > 0) { writer.write(buffer, 0, length); } reader.close(); writer.close(); } } ``` 该程序与上一个程序的思路是相同的,只不过它是按字符操作的。在Java中,一个字符通常是由两个字节表示的,所以它的复制速度可能会比使用字节流慢一些。但是,字符流具有比字节流更好的性能,适用于处理文本文件和其他基于字符的数据。 总之,两种方法都可以用来复制文件,它们的使用取决于文件类型和数据类型。如果你处理的是文本文件,最好使用字符流。如果你处理的是二进制文件,最好使用字节流。实际中,由于性能方面的考虑,字符流一般用于文本文件的读写,而字节流一般用于二进制文件的读写。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值