• 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,并且原字符串被覆盖了

    1. import java.io.*;
    2. import static java.lang.Character.isLetterOrDigit;
    3. import java.util.Scanner;
    4. public class FileTest {
    5. public static void main(String[] args) throws IOException {
    6. // 请在Begin-End间编写完整代码
    7. /********** Begin **********/
    8. // 接收给定字符串,获取相关路径
    9. Scanner input = new Scanner(System.in);
    10. String str = input.nextLine();
    11. String[] array = str.split(",");
    12. // 读取源文件
    13. File file1 = new File(array[0]);
    14. char[] chars = new char[Math.toIntExact(file1.length())];
    15. try(
    16. FileReader fileReader = new FileReader(file1);) {
    17. fileReader.read(chars);
    18. }
    19. //加密
    20. for (int i = 0; i < chars.length; i ++){
    21. chars[i] = (char) Encryption(chars[i]);
    22. }
    23. // 把加密后的内容保存到目标文件
    24. File file2 = new File(array[1]);
    25. try(
    26. FileWriter fileWriter = new FileWriter(file2);) {
    27. fileWriter.write(chars);
    28. }
    29. }
    30. // 定义加密方法
    31. public static int Encryption(int len){
    32. if ((len >= '0' & len < '9') | (len >= 'a' & len < 'z') | (len >= 'A' & len < 'Z')){
    33. return len + 1;
    34. }else if (len == '9'){
    35. return len - 9;
    36. }else if (len == 'z' | len == 'Z'){
    37. return len - 25;
    38. }else {
    39. return len;
    40. }
    41. }
    42. /********** End **********/
    43. }

  • 相关阅读:
    FL Studio21.2.0官方中文版重磅发布
    深入浅出零钱兑换问题——背包问题的套壳
    goreplay使用
    Google Earth Engine(GEE)——
    深入浅出总结求解菲波那切数列的五种方法
    如何在windows linux子系统Ubuntu 22.04.2 TLS中安装nvm
    面试官问:Go 中的参数传递是值传递还是引用传递?
    【论文笔记】TINYCD: A (Not So) Deep Learning Model For Change Detection
    Datawhale 202208 GitModel |线性规划 整数规划 多目标规划 灵敏度分析
    Numpy函数详解
  • 原文地址:https://blog.csdn.net/weixin_46075438/article/details/128074472