当前位置: 首页 > news >正文

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

字符流练习

    • 练习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:false1:true100:110010010: 1010100与10异或:1100100^    1010__________1101110110与10异或:1101110^    1010__________1100100

2.2 代码实现


package text.IOStream.FileWrite.FileWrite03;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*文件加密
为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。
加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。
解密原理:读取加密之后的文件,按照加密的规则反向操作,变成原始文件。^ : 异或两边相同:false两边不同:true0:false1:true100:110010010: 1010100与10异或:1100100^    1010__________1101110110与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<Integer> 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 < list.size(); i++) {if (i == list.size() - 1) {fw.write(list.get(i) + "");//加""的原因是防止写入字符对应的数字} else {fw.write(list.get(i) + "-");}}fw.close();}
}

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<String, Integer>() {@Overridepublic 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 输出结果

  • 原来的文件数据
    在这里插入图片描述
  • 现在的文件数据
    在这里插入图片描述

相关文章:

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

字符流练习 练习1&#xff1a;文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2&#xff1a;文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3&#xff1a;修改文件数据&#xff08;常规方法&#xff09;3.1 需求3.2 代码实现3.3 输出结果 练习4&#xff1a;修改文件数…...

华为云磁盘挂载

华为云磁盘挂载 磁盘挂载情况 fdisk -l 2. 查看当前分区情况 df -h 3.给新硬盘添加新分区 fdisk /dev/vdb 4.分区完成&#xff0c;查询所有设备的文件系统类型 blkid 发现新分区并没有文件系统类型&#xff08;type为文件系统具体类型&#xff0c;有ext3,ext4,xfs,iso9660等…...

通过大语言模型理解运维故障:评估和总结

张圣林 南开大学软件学院副教授、博士生导师 第六届CCF国际AIOps挑战赛程序委员会主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等国际会议和JSAC、TC、TSC等国际期刊发表高水平论文50余篇。主持国家自然科学基金项目2项&#xff0c;横向项目13项&#xff08;与华为、字节跳动、腾讯…...

SVN教程-SVN的基本使用

SVN&#xff08;Apache Subversion&#xff09;是一款强大的集中式版本控制系统&#xff0c;它在软件开发项目中扮演着至关重要的角色&#xff0c;用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比&#xff0c;SVN 的集中式架构使得团队能够更加协同地进行开发&…...

【MySQL】数据查询——DQL基本数据库查询

目录 查询语法1. 查询表中所有的数据行和列&#xff0c;采用“*”符号2. 查询表中指定列的数据。3. 在查询中使用别名&#xff0c;使用“AS”关键字。4. 在查询中使用常量列&#xff1a;如果需要将一些常量的默认信息添加到输出结果中&#xff0c;以方便统计或计算。可以使用常…...

机器人持续学习基准LIBERO系列9——数据集轨迹查看

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…...

uniapp中canvas的基础使用

canvas简介 canvas是uniapp中提供的一个组件,用于生成自定义的图形界面。通过canvas,我们可以通过JavaScript代码在页面上绘制各种图形和图像。 使用canvas 在页面中添加canvas 首先需要在页面的template中添加一个canvas组件: <template><view><canvas ca…...

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…...

老隋蓝海项目有人盈利的吗?怎么做比较好些呢?

在互联网创业的浪潮中&#xff0c;蓝海项目总是令人心动。老隋&#xff0c;作为一位经验丰富的创业者&#xff0c;近期分享了他所发现的蓝海项目。但不少人可能会有疑问&#xff1a;老隋分享的蓝海项目真的有人盈利了吗?如果真的盈利了&#xff0c;又该怎么做才能确保成功呢?…...

递归与递推(蓝桥杯 c++)

目录 题目一&#xff1a; 代码&#xff1a; 题目二: 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目一&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int …...

ArduinoTFTLCD应用

ArduinoTFTLCD应用 ArduinoTFTLCD应用硬件连接软件导入库显示数字、字符显示汉字方案1方案2 显示图片 总结 ArduinoTFTLCD应用 对于手工喜欢DIY的人来说&#xff0c;Arduino驱动的TFTLCD被很多人使用&#xff0c;此处就总结一下&#xff0c;使用的是VScode的PlatformIO插件驱动…...

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天&#xff0c;如何以创意和匠心为传统文化注入新的活力&#xff0c;成为了摆在每一位文化工作者面前的重要课题。近日&#xff0c;《秦时明月》作为一部深受观众喜爱的国产动画IP&#xff0c;在迎来其十七周年之际&#xff0c;联手陕西历史博物馆&#xf…...

2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除

一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型&#xff0c;事件处理程序) $("#box").on(dbclick,function () {$(…...

YOLOv6-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…...

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制&#xff0c;采用人工登记的方式保存相关数…...

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接…...

AJAX 学习笔记(Day1)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 AJAX 入门 1.1 AJAX 概念和 axios 使用 1.2 认识 URL 1.3 URL 查询参数 1.4 常用请求方法和数据提交 1.5 HT…...

leetcode 740.删除并活得点数

这道题和打家劫舍得思路很像。 思路&#xff1a;首先我们看到题目的意思&#xff0c;就是说我们如果选择了一个数&#xff0c;那么它相邻的数就会不得选入&#xff0c;也就是删除。这就是上一个题那个相邻的家不能偷的问题呗&#xff01; 我们从那个地方转换一下&#xff0c;…...

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...