字节流和字符流综合练习

本文介绍了Java中字节流和字符流的使用,通过示例展示了如何拷贝文件夹、文件加密以及对文本文件中的数据进行排序。包括FileInputStream和FileOutputStream的实例,以及两种不同的文件排序方法。
摘要由CSDN通过智能技术生成

字节流和字符流的使用场景

字节流:拷贝任意类型的文件

字符流:读取纯文本文件的数据;往纯文本文件中写出数据

练习1:拷贝

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

package a03test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test1 {
    public static void main(String[] args) throws IOException {
        //1.创建对象表示数据源
        File src=new File("E:\\JAVA\\24_3_31\\basic_code\\aaa");
        //2.创建对象表示目的地
        File dest=new File("E:\\JAVA\\24_3_31\\basic_code\\bbb");
        //3.调用方法开始拷贝
        copydir(src,dest);

    }
    private static void copydir(File src,File dest) throws IOException {
        dest.mkdirs();
        File[] files = src.listFiles();
        for (File file : files) {
            if(file.isFile()){
                FileInputStream fis=new FileInputStream(file);
                FileOutputStream fos=new FileOutputStream(new File(dest,file.getName()));
                byte[] bytes=new byte[1024];
                int len;
                while((len=fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else{
                copydir(file,new File(dest,file.getName()));
            }
        }
    }
}

运行结果:

 

练习2:文件加密

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

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

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

package a03test;

import java.io.*;

public class Test2 {
    public static void main(String[] args) throws IOException {
        //1.创建对象关联原始文件
        //FileInputStream fis=new FileInputStream("E:\\JAVA\\24_3_31\\basic_code\\aaa\\小熊猫.jpg");//加密
        FileInputStream fis=new FileInputStream("E:\\JAVA\\24_3_31\\basic_code\\bbb\\my.jpg");//解密
        //2.创建对象关联加密文件
        //FileOutputStream fos=new FileOutputStream("E:\\JAVA\\24_3_31\\basic_code\\bbb\\my.jpg");//加密
        FileOutputStream fos=new FileOutputStream("E:\\JAVA\\24_3_31\\basic_code\\bbb\\myy.jpg");//解密
        //3.加密处理
        int b;
        while((b=fis.read())!=-1){
            fos.write(b^2);
        }
        fos.close();
        fis.close();
    }
}

加密用注释掉的代码,解密用上面的方法

运行结果:

练习3:修改文件中的数据

文本文件中有以下的数据:2-1-9-4-7-8

将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9

解法1:

package a03test;

import javax.xml.transform.Source;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class Test3 {
    public static void main(String[] args) throws IOException {
        //1.读取数据
        FileReader fr=new FileReader("Test\\a.txt");
        StringBuilder  sb=new StringBuilder();
        int ch;
        while((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();
        System.out.println(sb);

        //2.排序
        String str=sb.toString();
        String[] arrstr = str.split("-");
        ArrayList<Integer> list=new ArrayList<>();
        for (String s : arrstr) {
            int i = Integer.parseInt(s);
            list.add(i);
        }
        Collections.sort(list);
        System.out.println(list);

        //3.写出
        FileWriter fw=new FileWriter("Test\\a.txt");
        for (int i = 0; i < list.size(); i++) {
            if(i==list.size()-1){
                fw.write(list.get(i)+"");
            }else{
                fw.write(list.get(i)+"-");
            }
        }
        fw.close();
    }
}

运行结果:

 

解法2:

package a03test;

import javax.xml.transform.Source;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Function;

public class Test3 {
    public static void main(String[] args) throws IOException {
        //1.读取数据
        FileReader fr=new FileReader("Test\\a.txt");
        StringBuilder  sb=new StringBuilder();
        int ch;
        while((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();
        System.out.println(sb);

        //2.排序
        Integer[] arr = Arrays.stream(sb.toString().split("-"))
                .map(Integer::parseInt)
                .sorted()
                .toArray(Integer[]::new);

        //3.写出
        FileWriter fw=new FileWriter("Test\\a.txt");
        String s=Arrays.toString(arr).replace(", ","-");
        String result = s.substring(1, s.length() - 1);
        fw.write(result);
        fw.close();


    }
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值