学习:Java输入输出之文件字符IO流之文件加密

第1关:Java输入输出之文件字符IO流之文件加密

任务描述

本关任务:对给定文件的内容加密,并将加密后的内容输出到另一个文件。

相关知识

之前我们学习了 Reader(字符输入流)和 Writer (字符输出流),下面我们来了解一下它们的常用子类,FileReader (文件字符输入流)和 FileWriter(文件字符输出流)。

FileReader (文件字符输入流)

FileReader 是 Reader 的子类,用于从文件中获取字符流。 ######FileReader 的构造方法 下表中是它的常用构造方法:

构造方法说明
FileReader(File file)通过打开一个到实际文件的连接来创建一个 FileReader 对象,该文件通过文件系统中的 File 对象指定
FileReader(String name)通过打开一个到实际文件的连接来创建一个 FileReader 对象,该文件通过文件系统中的路径名 name 指定

构造方法示例:

 
  1. public static void main(String[] args) throws IOException{
  2. // 通过File对象创建FileReader对象
  3. File file = new File("C:\\Users\\yy\\Desktop\\file\\a.txt");
  4. FileReader fileReader1 = new FileReader(file);
  5. // 通过字符串路径直接创建FileReader对象
  6. FileReader fileReader = new FileReader("C:\\Users\\yy\\Desktop\\file\\a.txt");
  7. }
FileReader 的方法

下表中是它的常用方法:

方法名方法说明
read()从文件中读取单个字符,返回一个 int 型变量,代表读取到的字符
read(byte b[])从文件中读取字符流到数组中
read(byte b[], int off, int len)从文件中读取字符到数组中。off:数组中的起始偏移量,len:写入的字符数

read(byte b[]) 方法使用示例:

 
  1. public static void main(String[] args) throws IOException{
  2. // 通过File对象创建FileReader对象,该路径下的a.txt文件中内容为abcd
  3. File file = new File("C:\\Users\\yy\\Desktop\\file\\a.txt");
  4. try(
  5. FileReader fileReader = new FileReader(file);){
  6. // 创建字符数组,长度为文件长度
  7. char[] characters = new char[(int)file.length()];
  8. // 读取字符流到数组中
  9. int read = fileReader.read(characters);
  10. // 打印数组
  11. System.out.print(characters);
  12. }
  13. }

执行结果:

 
  1. abcd
FileWriter (文件字符输出流)

FileWriter 是 Writer 的子类,用于将字符流写入到文件中。

FileWriter 构造方法

下表中是它的常用构造方法:

构造方法说明
FileWriter(File file)通过文件对象创建 FileWriter 对象
FileWriter(File file, boolean append)如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则覆盖文件信息
FileWriter(String name)通过字符串路径创建 FileWriter 对象
FileWriter(String name, boolean append)如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则覆盖文件信息

FileWriter(File file, boolean append) 构造方法示例:

 
  1. public static void main(String[] args) throws IOException{
  2. // 通过File对象创建FileWriter对象
  3. File file = new File("C:\\Users\\yy\\Desktop\\file\\a.txt");
  4. FileWriter filewriter = new FileWriter(file,false);
  5. }
FileWriter 的方法

下表中是它的常用方法:

方法名方法说明
write(int b)将字符写入文件输出流
write(byte b[])将字符数组写入文件输出流
write(byte b[], int off, int len)将字符数组写入文件输出流,off:数组中的起始偏移量,len:写入的字节数
close()关闭流

write(byte b[], int off, int len) 方法使用示例:

 
  1. public static void main(String[] args) throws IOException{
  2. // 通过File对象创建FileWriter对象,该路径下的a.txt文件中内容abcd
  3. File file = new File("C:\\Users\\yy\\Desktop\\file\\a.txt");
  4. try(FileWriter filewriter = new FileWriter(file,false);){
  5. // 创建字符数组
  6. char[] characters = {f,g,h,j};
  7. // 将字符数组中部分数据写入文件流(从数组中下标为 1 的位置,取 2 个元素)
  8. filewriter.write(characters,1,2);
  9. }
  10. }

执行结果:文件中写入了 gh,并且原字符串被覆盖了。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,对给定文件的内容加密,并将加密后的内容输出到另一个文件,具体要求如下:

  • 接收给定的一行字符串(如:/test/a.txt,/test/b.txt。字符串中第一个文件路径为源文件,第二个路径文件用于存储加密内容);
  • 把源文件中的内容加密并写入到给定的文件中;
  • 加密规则: 对于数字,如果不是 9,在原来的基础上加 1,比如 5 变成 6,3 变成 4;如果是 9,变成 0; 对于字母字符,字符需要保留大小写,如果是非 z 字符,向右移动一个,比如 d 变成 e,G 变成 H;如果是 z(Z),z->a,Z-A; 对于非字母字符,比如 '、&、^, 保留不变,中文也保留不变。

注意:给定字符串中的逗号分隔符为中文逗号。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例: 测试输入:

 
  1. /test/a.txt,/test/b.txt

预期输出(后台查看用于存储加密内容的文件产生的结果):

 
  1. gtJg76$中

开始你的任务吧,祝你成功!

源代码:

import java.io.*;
import static java.lang.Character.isLetterOrDigit;
import java.util.Scanner;

public class FileTest {

    public static void main(String[] args) throws IOException {
        // 请在Begin-End间编写完整代码
        /********** Begin **********/
		// 接收给定字符串,获取相关路径
		Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        String[] array = str.split(",");
        // 读取源文件
        File file1 = new File(array[0]);
        char[] chars = new char[Math.toIntExact(file1.length())];
        try(
                FileReader fileReader = new FileReader(file1);) {
            fileReader.read(chars);
        }
        // 加密
		for (int i = 0; i < chars.length; i ++){
            chars[i] = (char) Encryption(chars[i]);
        }
        // 把加密后的内容保存到目标文件
        File file2 = new File(array[1]);
        try(
                FileWriter fileWriter = new FileWriter(file2);) {
            fileWriter.write(chars);
        }
    }

        // 定义加密方法
        public static int Encryption(int len){
        if ((len >= '0' & len < '9') | (len >= 'a' & len < 'z') | (len >= 'A' & len < 'Z')){
            return len + 1;
        }else if (len == '9'){
            return len - 9;
        }else if (len == 'z' | len == 'Z'){
            return len - 25;
        }else {
            return len;
        }
    }
        /********** End **********/

}

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值