zoukankan      html  css  js  c++  java
  • Java IO 字符流


    Reader字符输入流
    Writer字符输出流
    专门用于字符形式的读取和写入数据


    使用字符流读取文件

    FileReader是Reader的子类,用FileReader读取文件

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReaderTest {
        public static void main(String[] args) {
            File file = new File("d:/xyz/z/zzz/zzzz/lol.txt");
            //创建基于文件的Reader
            try(FileReader fileReader = new FileReader(file)){
                //创建字符数组,其长度就是文件的长度
                char[] all = new char[(int)file.length()];
                //以字符流的形式读取文件的内容
                fileReader.read(all);
                for (char b : all){
                    System.out.println(b);
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    使用字符流把字符串写入文件

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FileWriterTest {
        public static void main(String[] args) {
            File file = new File("d:/xyz/z/zzz/zzzz/lol4.txt");
            //创建基于文件的Writer对象
            try( FileWriter fileWriter = new FileWriter(file)){
                //以字符流的形式将数据写入到文件当中
               String data = "adasdfljaljdlskjdlasjd";
               fileWriter.write(data);
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    练习:文件加密

    准备一个文本文件(非二进制),其中包含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。
    字符需要保留大小写
    非字母字符
    比如’,&^ 保留不变,中文也保留不变

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class EncodeTest {
        public static void main(String[] args) {
            EncodeTest encodeTest = new EncodeTest();
            encodeTest.encodedFile();
        }
        public void encodedFile(){
            String LetterOrDigit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            File encodingFile = new File("d:/xyz/z/zzz/zzzz/lol.txt");
            char[] chars = new char[(int)encodingFile.length()];
            File encodedFile = new File("d:/xyz/z/zzz/zzzz/lolencoded.txt");
            try(FileReader fileReader = new FileReader(encodingFile);FileWriter fileWriter = new FileWriter(encodedFile)){
                fileReader.read(chars);
                System.out.println("加密前的内容");
                System.out.println(new String(chars));
                for (int i = 0; i<chars.length; i++){
                    char c = chars[i];
    
                    if (LetterOrDigit.indexOf(c)!=-1){
                        switch (chars[i]){
                            case 'Z':
                                c='A';
                                break;
                            case 'z':
                                c='a';
                                break;
                            case '9':
                                c='0';
                                break;
                            default:
                                c++;
                                break;
                        }
                    }
                    chars[i]=c;
                }
                System.out.println("加密后的内容");
                System.out.println(new String(chars));
                fileWriter.write(chars);
            }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。
    字符需要保留大小写
    非字母字符:
    比如’,&^ 保留不变,中文也保留不变

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.lang.reflect.Array;
    import java.util.Arrays;
    
    public class DecodeTest {
        public static void main(String[] args) {
            File encodedFile = new File("d:/xyz/z/zzz/zzzz/lolencoded.txt");
            File decodedFile = new File("d:/xyz/z/zzz/zzzz/loldecoded.txt");
            DecodeTest.decodeFile(encodedFile,decodedFile);
        }
    
        public static void decodeFile(File...targetFile){
            String LetterOrDigit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            int log = 0;
            File encodedFile = targetFile[0];
            File decodedFile = targetFile[1];
            char[] chars = new char[(int)encodedFile.length()];
            try(FileReader fileReader = new FileReader(encodedFile); FileWriter fileWriter = new FileWriter(decodedFile)){
                fileReader.read(chars);
                System.out.println("解密前的内容:");
                System.out.println(new String(chars));
                System.out.println();
                for (char c : chars){
                    if (LetterOrDigit.indexOf(c)!=-1){
                        switch (c){
                            case '0':
                                chars[log]='9';
                                break;
                            case 'a':
                                chars[log]='z';
                                break;
                            case 'A':
                                chars[log]='Z';
                                break;
                            default:
                                chars[log]--;
                                break;
                        }
                    }
                    log++;
                }
                fileReader.read(chars);
                System.out.println("解密后的内容:");
                System.out.println(new String(chars));
                fileWriter.write(chars);
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    }
    
    
  • 相关阅读:
    python内置函数枚举 enumerate()
    python内置函数map的介绍
    什么是lambda函数
    python urllib库 加密及解析url中中文汉字
    python解决高并发思路
    后端文件保存的两种方式
    matplotlib基本用法
    自编码器
    数据增强
    卷积神经网络
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860163.html
Copyright © 2011-2022 走看看