小工具知识网

当前位置: 首页 > 行业知识 > 【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)

行业知识

【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)

2026-11-03 13:51:26 来源:互联网转载

字符流练习

    • 练习1:文件夹拷贝
      • 1.1 需求
      • 1.2 代码实现
      • 1.3 输出结果
      • 练习2:文件加密与解密
        • 2.1 需求
        • 2.2 代码实现
        • 2.3 输出结果
        • 练习3:修改文件数据(常规方法)
          • 3.1 需求
          • 3.2 代码实现
          • 3.3 输出结果
          • 练习4:修改文件数据(省略方法)
            • 4.1 需求
            • 4.2 代码实现
            • 4.3 ���出结果

              练习1:文件夹拷贝

              1.1 需求

              需求:拷贝一个文件夹,考虑子文件夹

              • 拷贝的文件夹:D:\QQ
              • 拷贝的位置:D:\File

                1.2 代码实现

                package text.IOStream.FileWrite.FileWrite02;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*拷贝需求:    拷贝一个文件夹,考虑子文件夹拷贝的文件夹:D:\QQ拷贝的位置:D:\File */public class FileWrite02 {    public static void main(String[] args) throws IOException {        //创建数据源        File startFile = new File("D:\QQ");        //创建目的地        File endFile = new File("D:\File");        copy(startFile, endFile);    }    /*     * 作用:拷贝文件夹     * 参数一:数据源     * 参数二:目的地     * */    private static void copy(File startFile, File endFile) throws IOException {        //先创建目的地文件(当目的地文件存在时,则创建失败)        endFile.mkdir();        //进入文件夹        File[] files = startFile.listFiles();        //遍历数组        for (File file : files) {            //判断该file是文件还是文件夹            if (file.isFile()) {//如果是文件,则拷贝(拷贝用字节流)                //创建字节输入流对象                FileInputStream fis = new FileInputStream(startFile);                //创建字节输出流对象                //new File(endFile, startFile.getName())指得是新创建个文件对象                //参数一:指要拷贝的目的地的文件                //参数二:指要拷贝目的地文件的名字                FileOutputStream fos = new FileOutputStream(new File(endFile, startFile.getName()));                //创建了个字节数组,加快拷贝效率                byte[] bytes = new byte[1024 * 1024 * 5];                int b;//定义一个变量记录每次读取的数据的个数                while ((b = fis.read()) != -1) {                    fos.write(bytes, 0, b);                }                //释放资源(先开的流后关)                fos.close();                fis.close();            } else {//如果是文件夹,则递归                copy(startFile, new File(endFile, startFile.getName()));            }        }    }}

                1.3 输出结果

                练习2:文件加密与解密

                2.1 需求

                为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。

                • 加密原理:

                  对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。

                • 解密原理:

                  读取加密之后的文件,按照加密的规则反向操作,变成原始文件。

                  ^ : 异或

                  两边相同:false

                  两边不同:true

                         0:false       1:true       100:1100100       10: 1010 100与10异或:        1100100      ^    1010      __________        1101110  110与10异或:        1101110      ^    1010      __________        1100100

                  2.2 代码实现

                  package text.IOStream.FileWrite.FileWrite03;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*文件加密为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。加密原理:    对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。解密原理:    读取加密之后的文件,按照加密的规则反向操作,变成原始文件。     ^ : 异或           两边相同:false           两边不同:true           0:false           1:true           100:1100100           10: 1010     100与10异或:            1100100          ^    1010          __________            1101110      110与10异或:            1101110          ^    1010          __________            1100100 */public class FileWrite03 {    public static void main(String[] args) throws IOException {        //创建对象并关联原始文件        FileInputStream fis1 = new FileInputStream("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite03\a.txt");        //创建对象并关联加密文件        FileOutputStream fos1 = new FileOutputStream("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite03\b.txt");//创建对象并关联加密文件        FileInputStream fis2 = new FileInputStream("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite03\b.txt");        //创建对象并关联解密文件        FileOutputStream fos2 = new FileOutputStream("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite03\c.txt");        //加密        ency(fis1, fos1);        //解密        redu(fis2, fos2);    }    //解密    private static void redu(FileInputStream fis1, FileOutputStream fos2) throws IOException {        int b;        while ((b = fis1.read()) != -1) {            fos2.write(b ^ 10);        }        //释放资源        fos2.close();        fis1.close();    }    //加密    private static void ency(FileInputStream fis, FileOutputStream fos) throws IOException {        int b;        while ((b = fis.read()) != -1) {            fos.write(b ^ 10);        }        //释放资源        fos.close();        fis.close();    }}

                  2.3 输出结果

                  • 原来的文件:a.txt
                  • 加密后的文件:b.txt
                  • 解密后的文件:c.txt

                    练习3:修改文件数据(常规方法)

                    3.1 需求

                    需求:

                    • 文本文件中有的数据:

                      2-1-9-4-7-8

                    • 将文件中的数据进行排序,变成以下的数据;

                      1-2-4-7-8-9

                      细节1:   文件中的数据不要换行细节2:   文件可能有隐藏的bom头

                      3.2 代码实现

                      package text.IOStream.FileWrite.FileWrite04;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;/*修改文件中的数据需求:    文本文件中有的数据:     2-1-9-4-7-8     将文件中的数据进行排序,变成以下的数据;     1-2-4-7-8-9细节1:    文件中的数据不要换行细节2:    文件可能有隐藏的bom头 */public class FileWrite04 {    public static void main(String[] args) throws IOException {        //创建对象        FileReader fr = new FileReader("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileWrite\\FileWrite04\\a.txt");        //排序        //创建StringBuilder对象用于存储数据        StringBuilder sb = new StringBuilder();        //创建变量记录读取的数据个数        int b;        while ((b = fr.read()) != -1) {            sb.append((char) b);        }        fr.close();        //将StringBuilder里的数据转换成字符串,方便截取        String str = sb.toString();        //截取字符串        String[] split = str.split("-");        //创建集合用于存储数字        ArrayList list = new ArrayList();        //遍历数组,将数字存入集合        for (String s : split) {            int num = Integer.parseInt(s);            list.add(num);        }        //排序集合里的数字        Collections.sort(list);        //写出        FileWriter fw = new FileWriter("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileWrite\\FileWrite04\\a.txt");        //遍历集合        for (int i = 0; i  

                      3.3 输出结果

                      • 原来文件数据

                      • 现在文件数据

                        练习4:修改文件数据(省略方法)

                        4.1 需求

                        需求:

                        • 文本文件中有的数据:

                          2-1-9-4-7-8

                        • 将文件中的数据进行排序,变成以下的数据;

                          1-2-4-7-8-9

                          细节1:   文件中的数据不要换行细节2:   文件可能有隐藏的bom头

                          4.2 代码实现

                          package text.IOStream.FileWrite.FileWrite05;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Arrays;import java.util.function.Function;/*修改文件中的数据需求:文本文件中有的数据:2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据;1-2-4-7-8-9细节1:    文件中的数据不要换行细节2:    文件可能有隐藏的bom头*/public class FileWrite05 {    public static void main(String[] args) throws IOException {        //创建对象        FileReader fr = new FileReader("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite05\a.txt");        //创建StringBuilder对象用于存储数据        StringBuilder sb = new StringBuilder();        //创建变量记录读取的数据个数        int b;        while ((b = fr.read()) != -1) {            sb.append((char) b);        }        fr.close();        //排序        Integer[] array = Arrays.stream(sb.toString().split("-"))//Stream流将StringBuilder里的数据转换成字符串并分割字符串                .map(new Function() {                    @Override                    public Integer apply(String s) {                        return Integer.parseInt(s);                    }                })//格式转换                .sorted()//排序                .toArray(Integer[]::new);//利用方法引用转换成数组        //写出        FileWriter fw = new FileWriter("D:\JavaCode\code\codeText01\src\text\IOStream\FileWrite\FileWrite05\a.txt");        String replace = Arrays.toString(array).replace(", ", "-");//将排序后的数组中的 , 替换成 -        String substring = replace.substring(1, replace.length() - 1); //截取字符串(截取第二个到倒数第二个)        fw.write(substring);//写入数据        fw.close();    }}

                          4.3 输出结果

                          • 原来的文件数据
                          • 现在的文件数据

上一篇:服务器前置机怎么部署设备?

下一篇:宝塔面板Windows端口监测攻略,端口监控技巧轻松掌握!