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();
                }
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章