首页 > 其他分享 >字节流和字符流综合练习

字节流和字符流综合练习

时间:2024-04-01 21:33:12浏览次数:30  
标签:字符 java 字节 练习 加密 File new import String

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

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

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

练习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();


    }
}

运行结果:

 

标签:字符,java,字节,练习,加密,File,new,import,String
From: https://blog.csdn.net/TNTxd/article/details/137240299

相关文章

  • 字符集(ASCII,GBK,Unicode)
    一、编码和解码:图片来自哔站黑马程序员代码演示:packagea02charstreamdemo;importjava.io.UnsupportedEncodingException;importjava.util.Arrays;publicclasscharStreamDemo1{publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException......
  • 实现两个字符串相乘
    ‘’’有两个字符串,str1,str2,内容为数值,数值均大于0请编写算法计算两个字符串相乘的结果,不可以使用大数据类型,不可以把字符串直接转成整数来处理。题目要求的很明确,不可以直接把字符串转成整数然后相乘,所以int(str1)*int(str2)是不被允许的。不止如此,第三个示例里,数值已经......
  • MySQL日常练习——多表查询
    1、创建DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL......
  • 3 月水题练习
    真是快呀......
  • 韦东山-数码相框之输出16*16字符
    字符编码字符编码简介字符(character)是计算机与人交互的媒介,人虽然可以看懂二进制串,但文字是更加直观的。所以需要用数字来表示字符,字符与数字的对应关系就叫编码(coding)。ASCII:使用1个字节表示字符,8位二进制一共可表示256个不同的值,但实际只用到了前面的128个位置。GBK:双字......
  • python基础(四)----列表、字典练习题
    好友管理系统请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括:(1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。(2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删......
  • Python列表、字典、元组练习题
    一、将下列姓名长度小于2字符的删除,将写法不同但名字一样的名字合并,并按首字母大写形式输出。names=[‘Bob’,‘JOHN’,‘alice’,‘bob’,‘ALICE’,‘J’,‘Bob’]答案:names=['Bob','JOHN','alice','bob','ALICE','J','Bob']ans={name.title()for......
  • 浅看BCEL字节码
    什么是BCELBCEL是位于sun包下的一个项目,是属于ApacheCommon的一个子项目BCEL-LoadClass分析demopackageorg.example;importcom.sun.org.apache.bcel.internal.Repository;importcom.sun.org.apache.bcel.internal.classfile.JavaClass;importcom.sun.org.apache.bcel......
  • php反序列化——字符逃逸增加
    题目 放到本地环境 发现是这种情况:a:2:{i:0;s:1:"x";i:1;s:5:"aaaaa";}分成两部分: a:2:{i:0;s:1:"x              ";i:1;s:5:"aaaaa";}现在需要做的就是自己构造第二部分:  ";i:1;s:6:"123456";}  一共20个字符经过preg_replace函数 ......
  • php采用aes算法,字符编码utf8,填充模式ECB,填充:ZeroPadding,编码:base64,实现加密
    原文:https://blog.csdn.net/yinxinyue0621/article/details/129813334一、php:三种填充模式的区别(PKCS7Padding/PKCS5Padding/ZeroPadding)(一)常见的三种填充方式:我们知道某些加密算法要求明文需要按一定长度对齐,叫做块大小(BlockSize),比如16字节,那么对于一段任意的数据,加密前需要......