java字符流 加密文件和解密文件

准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。
设计一个方法

public static void encodeFile(File encodingFile, File encodedFile);

在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。
加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0
字母字符:
如果是非z字符,向右移动一个,比如d变成e, G变成H
如果是z,z->a, Z-A。
字符需要保留大小写
非字母字符
比如’,&^ 保留不变,中文也保留不变
建议: 使用以前学习的练习题中的某个Java文件,比如循环练习,就有很多的字符和数字
在这里插入图片描述

 public static void main(String[] args) {
        File encodingFile = new File("G:\\encodingFile.txt");
        //加密之后的文件
        File encodedFile = new File("G:\\encodedFile.txt");
        //解密之后的文件
        File decodeingFile = new File("G:\\decodeingFile.txt");
        encodeFile(encodingFile,encodedFile);
        //decodeingFile(encodedFile,decodeingFile);
    }
//加密文件
    public static void encodeFile(File encodingFile, File encodedFile){
        //读取文件内容
        FileReader reader = null;
        FileWriter writer = null;
        System.out.println("加密前的内容:");
        try {
            reader = new FileReader(encodingFile);
            writer = new FileWriter(encodedFile);
            //文件的长度
            char[] all = new char[(int) encodingFile.length()];
            //加密之后的长度,用于保存加密后的字符
            char[] cs  = new char[(int) encodingFile.length()];
            reader.read(all);
            for (char b : all){
                System.out.print(b+" ");
            }
            System.out.println();
            for (int i = 0 ; i<all.length;i++){
                if (all[i] >= '0' && all[i] <= '9'){
                    if (all[i]=='9'){
                        cs[i] = '0';
                    }else{
                        cs[i] = (char) (all[i]+1);
                    }
                }else if (all[i] >= 'a' && all[i] <= 'z' || all[i]>='A' && all[i]<='Z'){
                    if (all[i] == 'z'){
                        cs[i] = 'a';
                    }else if (all[i] == 'Z'){
                        cs[i] = 'A';
                    }else{
                        cs[i] = (char) (all[i]+1);
                    }
                }else {
                    cs[i] = all[i];
                }
            }

            System.out.println("加密后的内容:");
            for (char d : cs){
                System.out.print(d+" ");
            }
            writer.write(cs);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (reader!=null || writer != null){
                try {
                    reader.close();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

解密在文件加密中生成的文件。
设计一个方法

public static void decodeFile(File decodingFile, File decodedFile);

在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
解密算法:
数字:
如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
如果是0的数字,变成9
字母字符:
如果是非a字符,向左移动一个,比如e变成d, H变成G
如果是a,a->z, A-Z。
字符需要保留大小写
非字母字符:
比如’,&^ 保留不变,中文也保留不变
在这里插入图片描述

//解密文件
    public static  void  decodeingFile(File encodedFile,File decodeingFile){
        System.out.println("解密之前的内容:");
        FileReader reader = null;
        FileWriter writer = null;
        try {
             reader = new FileReader(encodedFile);
             writer = new FileWriter(decodeingFile);
            //解密前的文件长度
            char[] all = new char[(int) encodedFile.length()];
            //解密之后的文件长度,用来保存解密后的字符
            char[] cs = new char[(int) encodedFile.length()];
            reader.read(all);
            for (char a : all){
                System.out.print(a+" ");
            }
            for (int i= 0;i<all.length;i++){
                if (all[i]>='0' && all[i] <= '9'){
                    if (all[i] == '0'){
                        cs[i] = '9';
                    }else{
                        cs[i] = (char) (all[i]-1);
                    }
                }else if(all[i]>= 'a'&& all[i]<='z' || all[i]>='A' && all[i]<='Z'){
                    if (all[i] == 'a'){
                        cs[i] = 'z';
                    }else if(all[i] == 'A'){
                        cs[i] = 'Z';
                    }else{
                        cs[i] = (char) (all[i] - 1);
                    }
                }else{
                    cs[i] = all[i];
                }
            }
            System.out.println();
            System.out.println("解密之后的内容:");
            for (char d : cs){
                System.out.print(d+" ");
            }
            writer.write(cs);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (reader!=null || writer != null){
                try {
                    reader.close();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
文件解密是指将加密过的文件还原成原始的文件。在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文件解密的基本原理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值