IO综合练习

一.文件拷贝

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

import java.io.*;

public class IO {
    public static void main(String[] args) throws IOException {
        File f = new File("C:\\Users\\21566\\IdeaProjects\\untitled");
        File copy = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\copy");
        Directory(f, copy);
    }

    private static void Directory(File f, File copy) throws IOException {
        copy.mkdirs();//创建copy地址的多级文件夹,防止因为该文件夹不存在而报错
        File[] files = f.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                Directory(file, new File(copy, file.getName()));//如果该文件是一个文件夹则递归调用Directory方法搜寻其中的内容
            }
            if (file.isFile()) {
                FileInputStream fis = new FileInputStream(file);
                FileOutputStream fos = new FileOutputStream(new File(copy, file.getName()));//拷贝写入时,应该写入该文件原本的名字和格式
                byte[] b = new byte[1024];
                int len;
                while ((len = fis.read(b)) != -1) {
                    fos.write(b, 0, len);
                }
                fos.close();
                fis.close();
            }
        }
    }
}

二.文件加密

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

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

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

import java.io.*;

public class IO {
    public static void main(String[] args) throws IOException {
        File secretfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\copy.txt");
        File lockedfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\lock.txt");
        File initfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\init.txt");
        lock(secretfile, lockedfile);
        key(lockedfile, initfile);
    }

    private static void lock(File secretfile, File lockedfile) throws IOException {
        FileInputStream fis = new FileInputStream(secretfile);
        FileOutputStream fos = new FileOutputStream(lockedfile);
        int len;
        while ((len = fis.read()) != -1) {
            fos.write(len ^ 8);//进行异或,使用二进制进行计算,将数据加密
        }
        fos.close();
        fis.close();
    }

    private static void key(File lockedfile, File initfile) throws IOException {
        FileInputStream fis = new FileInputStream(lockedfile);
        FileOutputStream fos = new FileOutputStream(initfile);
        int len;
        while ((len = fis.read()) != -1) {
            fos.write(len ^ 8);//使用同样的数字转换成二进制数进行异或运算解开加密
        }
        fos.close();
        fis.close();
    }
}

三.修改文件中的数据

文本文件中有以下的数据:

2-1-9-4-7-8

将文件中的数据进行排序变成以下的数据:

1-2-4-7-8-9

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class IO {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("C:\\Users\\21566\\IdeaProjects\\untitled6\\test.txt");
        StringBuilder sb = new StringBuilder();
        int len;
        while ((len = fr.read()) != -1) {
            sb.append((char) len);
        }
        fr.close();
        String str = sb.toString();
        String[] arr = str.split("-");
        ArrayList<Integer> al = new ArrayList<>();
        for (String s : arr) {
            int i = Integer.parseInt(s);
            al.add(i);
        }
        Collections.sort(al);
        FileWriter fw = new FileWriter("C:\\Users\\21566\\IdeaProjects\\untitled6\\test.txt");
        for (int i = 0; i < al.size(); i++) {
            if (i == al.size() - 1) {
                fw.write((al.get(i) + ""));
            } else {
                fw.write((al.get(i) + "-"));
            }
        }
        fw.close();
    }
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值