Java IO详解(四)------字符输入输出流

File 类的介绍:Java IO详解(一)------File 类 - YSOcean - 博客园

Java IO 流的分类介绍:Java IO详解(二)------流的分类 - YSOcean - 博客园

Java IO 字节输入输出流:Java IO详解(三)------字节输入输出流 - YSOcean - 博客园

那么这篇博客我们讲的是字节输入输出流:Reader、Writer(下图红色长方形框内),红色椭圆框内是其典型实现(FileReader、FileWriter)

  

①、为什么要使用字符流?

  因为使用字节流操作汉字或特殊符号语言的时候容易乱码,因为汉字不止一个字节,为了解决这个问题,建议使用字符流。

②、什么情况下使用字符流?

  一般可以用记事本打开的文件,我们可以看到内容不乱码的。就是文本文件,可以使用字符流。而操作二进制文件(比如图片、音频、视频)必须使用字节流

 1、字符输出流:FileWriter

public abstract class Writer
  extends Object
  implements Appendable, Closeable, Flushable

  用于写入字符流的抽象类

  方法摘要:

  

  下面我们用 字符输出流 Writer  的典型实现 FileWriter 来介绍这个类的用法:

//1、创建源
		File srcFile = new File("io"+File.separator+"a.txt");
		//2、创建字符输出流对象
		Writer out = new FileWriter(srcFile);
		//3、具体的 IO 操作
			/***
			 * void write(int c):向外写出一个字符
			 * void write(char[] buffer):向外写出多个字符 buffer
			 * void write(char[] buffer,int off,int len):把 buffer 数组中从索引 off 开始到 len个长度的数据写出去
			 * void write(String str):向外写出一个字符串
			 */
		//void write(int c):向外写出一个字符
		out.write(65);//将 A 写入 a.txt 文件中
		//void write(char[] buffer):向外写出多个字符 buffer
		out.write("Aa帅锅".toCharArray());//将 Aa帅锅 写入 a.txt 文件中
		//void write(char[] buffer,int off,int len)
		out.write("Aa帅锅".toCharArray(),0,2);//将 Aa 写入a.txt文件中
		//void write(String str):向外写出一个字符串
		out.write("Aa帅锅");//将 Aa帅锅 写入 a.txt 文件中
		
		//4、关闭流资源
		/***
		 * 注意如果这里有一个 缓冲的概念,如果写入文件的数据没有达到缓冲的数组长度,那么数据是不会写入到文件中的
		 * 解决办法:手动刷新缓冲区 flush()
		 * 或者直接调用 close() 方法,这个方法会默认刷新缓冲区
		 */
		out.flush();
		out.close();

  

 2、字符输入流:Reader

public abstract class Reader
  extends Object
  implements Readable, Closeable

  用于读取字符流的抽象类。

  方法摘要:

  

  下面我们用 字符输入流 Reader  的典型实现 FileReader 来介绍这个类的用法:

 

//1、创建源
		File srcFile = new File("io"+File.separator+"a.txt");
		//2、创建字符输出流对象
		Reader in = new FileReader(srcFile);
		//3、具体的 IO 操作
			/***
			 * int read():每次读取一个字符,读到最后返回 -1
			 * int read(char[] buffer):将字符读进字符数组,返回结果为读取的字符数
			 * int read(char[] buffer,int off,int len):将读取的字符存储进字符数组 buffer,返回结果为读取的字符数,从索引 off 开始,长度为 len
			 * 
			 */
		//int read():每次读取一个字符,读到最后返回 -1
		int len = -1;//定义当前读取字符的数量
		while((len = in.read())!=-1){
			//打印 a.txt 文件中所有内容
			System.out.print((char)len); 
		}
		
		//int read(char[] buffer):将字符读进字符数组
		char[] buffer = new char[10]; //每次读取 10 个字符
		while((len=in.read(buffer))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		
		//int read(char[] buffer,int off,int len)
		while((len=in.read(buffer,0,10))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		//4、关闭流资源
		in.close();

  

 3、用字符流完成文件的复制

/**
		 * 将 a.txt 文件 复制到 b.txt 中
		 */
		//1、创建源和目标
		File srcFile = new File("io"+File.separator+"a.txt");
		File descFile = new File("io"+File.separator+"b.txt");
		//2、创建字符输入输出流对象
		Reader in = new FileReader(srcFile);
		Writer out = new FileWriter(descFile);
		//3、读取和写入操作
		char[] buffer = new char[10];//创建一个容量为 10 的字符数组,存储已经读取的数据
		int len = -1;//表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾
		while((len=in.read(buffer))!=-1){
			out.write(buffer, 0, len);
		}
		
		//4、关闭流资源
		out.close();
		in.close();

  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
文件解密是指将加密过的文件还原成原始的文件。在Java中,可以使用文件字符IO流来实现文件解密。 首先,需要使用FileReader类来读取加密文件中的字符流。然后,使用自定义的解密算法对字符流进行解密。最后,使用FileWriter类将解密后的字符流写入到新的文件中。 以下是一个简单的Java文件解密示例代码: ```java import java.io.*; public class FileDecryptor { public static void main(String[] args) { try { // 读取加密文件 FileReader fr = new FileReader("encrypted.txt"); BufferedReader br = new BufferedReader(fr); // 解密字符String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(decrypt(line)); } // 写入解密后的文件 FileWriter fw = new FileWriter("decrypted.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write(sb.toString()); // 关闭流 br.close(); fr.close(); bw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } // 自定义解密算法 private static String decrypt(String line) { // TODO: 实现解密算法 return line; } } ``` 在上面的代码中,我们使用了FileReader和FileWriter类来读写文件,使用BufferedReader和BufferedWriter类来提高读写效率。同时,我们也定义了一个decrypt方法来实现自定义的解密算法。在实际应用中,需要根据具体的加密算法来实现decrypt方法。 希望这个简单的示例能够帮助你理解Java文件解密的基本原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员可乐、

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值