Java基础----字节流和字符流

1.使用字节流拷贝文件夹

import java.io.*;public class Tset01 {public static void main(String[] args) throws IOException {//拷贝一个文件夹,考虑子文件夹//E:\hello -> E:\aaaFile src=new File("E:\\hello");File dest=new File("E:\\dest");copydir(src,dest);}private static void copydir(File src, File dest) throws IOException {dest.mkdir();//递归---如果是文件,直接拷贝,如果是文件夹,进行递归//1.进入数据源File[] files=src.listFiles();//2.遍历数据for (File file : files) {if (file.isFile()){//3.判断是文件,直接拷贝FileInputStream fis = new FileInputStream(file);//写入到文件夹时,必须以文件开始,文件结束----即要在out文件夹中创建相对应的文件,其中dest是父目录FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));byte[] bytes=new byte[1024*1024];int len;while ((len=fis.read(bytes)) != -1){fos.write(bytes,0,len);}fos.close();fis.close();}else {//4.判断是文件夹,递归copydir(file,new File(dest,file.getName()));}}}
}

        1.在拷贝文件夹的时候,我们需要注意:必须在新文件夹中有与原文件夹中的所有文件一一对应。记住--以文件开始,以文件结束。

         2.如果要拷贝的文件夹中都是文件,我们直接写入即可,由于不知道文件大小,所以采用数组存储一次读取多少字节。一般都是1024的整数倍

        3.文件夹中有文件夹的话,我们需要递归调用此函数,再进行写入。

2.对原始文件进行加密存储,再使用的时候再对其进行解密处理

加密原理:
        对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。
解密原理:
        读取加密之后的文件,按照加密的规则反向操作,变成原始文件。

在解密,解密文件的时候,我选择采用异或的方式。

//先加密//1.创建对象去关联原始文件FileInputStream fis = new FileInputStream("E:\\JetBrains2023\\JavaSE\\1.jpg");//2.创建对象去关联加密文件FileOutputStream fos = new FileOutputStream("E:\\JetBrains2023\\JavaSE\\ency.jpg");//3.加密处理int n;while ((n=fis.read()) != -1){fos.write(n ^ 10);}//4.释放资源fos.close();fis.close();//后解密//1.创建对象去关联原始文件FileInputStream fis1 = new FileInputStream("E:\\JetBrains2023\\JavaSE\\ency.jpg");//2.创建对象去关联加密文件FileOutputStream fos1 = new FileOutputStream("E:\\JetBrains2023\\JavaSE\\redu.jpg");//3.加密处理int b;while ((b=fis1.read()) != -1){fos1.write(b ^ 10);}//4.释放资源fos.close();fis.close();

大家去了解异或的相关知识后可以得知----两次异或同一个数,还是原数本身。

至于为什么fis.read()后的结果可以和整数10异或,那是因为idea会把结果和10进行二进制转化。

3.文件中的数据进行排序

例如: 2-1-9-4-7-8-》1-2-4-7-8-9

//1.读取数据FileReader fr = new FileReader("E:\\JetBrains2023\\JavaSE\\a.txt");StringBuilder stringBuilder=new StringBuilder();//2.排序int ch;while ((ch=fr.read())!=-1){stringBuilder.append((char) ch);}fr.close();String str = stringBuilder.toString();ArrayList<Integer> list = new ArrayList<>();String[] split = str.split("-");for (String s : split) {int i = Integer.parseInt(s);list.add(i);}Collections.sort(list);//3.写出数据FileWriter fw = new FileWriter("E:\\JetBrains2023\\JavaSE\\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();

        StringBuilder stringBuilder=new StringBuilder()是为了可以操作字符串,要不然我们只能看不能动手。

这些代码相对来说比较繁琐,我们可以采用stream()流的方式改进

//1.读取数据FileReader fr = new FileReader("E:\\JetBrains2023\\JavaSE\\a.txt");StringBuilder stringBuilder=new StringBuilder();int ch;while ((ch=fr.read())!=-1){stringBuilder.append((char) ch);}fr.close();//2.排序Integer[] arr=Arrays.stream(stringBuilder.toString().split("-")).map(Integer::parseInt).sorted().toArray(Integer[]::new);//3.写出数据FileWriter fw = new FileWriter("E:\\JetBrains2023\\JavaSE\\a.txt");String s=Arrays.toString(arr).replace(",","-");String result = s.substring(1, s.length() - 1);fw.write(result);fw.close();

其中map()方法是进行数据类型转换。

toArray()是将结果收集到数组中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语写作中available容易忽略的用法

Available 的一般用法没有问题&#xff0c;但它的下面用法容易被我们忽略。 比较下面两句&#xff1a; There is no water. There is no water available. 这两句都翻译为“没有水”&#xff0c;但上一句的意思就是“没有水”&#xff0c;而下一句意味着“需要水但没有水”…

vue3 -- 项目使用自定义字体font-family

在Vue 3项目中使用自定义字体(font-family)的方法与在普通的HTML/CSS项目中类似。可以按照以下步骤进行操作: 引入字体文件: 首先,确保你的字体文件(通常是.woff、.woff2、.ttf等格式)位于项目中的某个目录下,比如src/assets/font/。 在全局样式中定义字体: 在你的全局…

[阅读笔记25][WebArena]A Realistic Web Environment for Building Autonomous Agents

这篇论文提出了WebArena这个环境与测试基准&#xff0c;在24年1月发表。 之前的agent都是在一些简化过的合成环境中测试的&#xff0c;这会导致与现实场景脱节。这篇论文构建了一个高度逼真、可复现的环境。该环境涉及四个领域&#xff1a;电子商务、论坛讨论、软件开发和内容管…

多种情况下合并单元格(S-Table+Vue3)

合并单元格(S-TableVue3) 跨行合并&#xff1a;rowspan“合并单元格的个数” 跨列合并&#xff1a;colspan"“合并单元格的个数” 文章目录 合并单元格(S-TableVue3)第一列跨行合并单元格templatescript效果 多列跨行合并单元格templatescript效果图 多行合并可参考 第一列…

exceljs库实现excel表样式定制化

概览 xlsx 是前端最热门的 Excel 导出方案&#xff0c;又叫做 SheetJs&#xff0c;默认不支持修改 Excel 的样式。而exceljs库就可以做到自定义excel表样式&#xff0c;下面来介绍一下其使用方法 一. 完整示例 代码示例 const exportTemplate2 () > { // 创建工作簿 …

Electron桌面应用开发:从入门到发布全流程解析

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;HTML、CSS和JavaScript&#xff09;来创建跨平台的桌面应用程序。在本文中&#xff0c;我们将深入探讨Electron桌面应用程序开发的全流程&#xff0c;从入门到发布。 安装和配置Elec…

iOS ------ Block的总结

前面看了Block的基本知识&#xff0c;和一些源码。但对于block怎么用的还不了解&#xff0c;代码中出现block会看不懂&#xff0c;现在来具体看一下Block的用法并做个总结。 1.Block是什么 block对象是一个C语言结构体&#xff0c;可以并入C和OC的代码中&#xff0c;Block本质…

探索以太坊世界:使用Geth打造你的私人网络

文章目录 概要名词解释Geth&#xff08;Go Ethereum&#xff09;区块链网络种类 具体流程下载geth客户端配置私链新建创世区块启动私链 连接MetaMask钱包小结 概要 在区块链领域&#xff0c;以太坊私链的搭建是学习和开发智能合约的重要一步。私链允许开发者在独立的环境中进行…

地图图源#ESRI ArcGIS XYZ Tiles系列(TMS)

目录 1、前言 2、地图图源网址 2.1、Satellite 卫星图源 2.2、Terrain 地形图源 2.3、Street 路网/标注图源 2.4、Specifity 特色设计图源 3、专业推荐”穿搭“ 4、图源配置下载及使用 图源名称图层类别特别注意谷歌 Google①地形 ②影像 ③矢量及标注 ④特色图源国内大…

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "&#xff5b;我%$是&#xff0c;《速$.度\发》中 /国、人"&#xff08;1&#xff09;提取汉字 汉字的范围为”\u4e00-\u9fa5“&#xff0c;这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…

sso-oauth2单点登录功能笔记

场景&#xff1a;最近公司2个系统需要做单点登录&#xff0c;A系统作为服务器&#xff0c;认证方式是sso-oauth2方式&#xff0c;B系统作为客户端&#xff0c;token方式是ta-token&#xff0c;先来张sso-oauth2认证方式的图 前置准备工作 第一步&#xff1a;要确认谁是服务提…

kubernetes的网络通信实现原理

网络原理 Kubernetes网络原理详解&#xff1a;一、Kubernetes 网络实现1.容器到容器&#xff08;同一Pod内&#xff09;通信流程&#xff1a;2. pod之间的通信&#xff08;以Calico为例&#xff09;&#xff1a; 二、CNI 网络模型三、网络策略四、开源的容器网络方案五、 常见网…

oracle控制文件的管理

1 说明 Oracle数据库中的控制文件是数据库管理中的重要组成部分&#xff0c;是一个二进制小文件&#xff0c;在 mount 阶段被读取。它包含了数据库的元数据信息和文件位置等重要数据&#xff0c;记录数据库当前物理状态&#xff0c;维护数据库的一致性&#xff0c;记录 RMAN 备…

2024年腾讯云免费服务器最新申请入口链接

腾讯云免费服务器申请入口 txybk.com/go/free 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器申请入口、限制…

【JavaEE初阶】网络原理|认识协议|协议分层|TCP/IP模型|封装和分用

一、认识协议 1.概念 简单来说&#xff1a;就是一种通信双方&#xff0c;对于通信规则的约定&#xff08;标准&#xff09;&#xff0c;一定是通信双方都认可的 但是这个协议不一定是认可面非常广的&#xff0c;即使是两个人之间的也可叫做协议 就好⽐⻅⽹友&#xff0c;彼此…

力扣740删除并获得整数和力扣1173第N个泰波那契数

力扣740删除并获得整数 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点…

systemverilog功能覆盖率

1 iff 如过满足条件则采样&#xff0c;iff可以理解为if covergroup iff_cov;coverpoint tr.data iff(!vif.reset) ; //复位时不采样 endgroup2 coverpoint和bin covergroup name_bin ;coverpoint tr.kind {bins zero {0}; //1个bin 代表kind 0bins low {[1:3]…

(十三)C++自制植物大战僵尸游戏多用户存档实现(二)

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs UserData.h 在头文件中定义了枚举类型openUserDataReturnType&#xff0c;用于表示打开用户数据文件的返回状态。FileExistError表示文件存在但是打开错误&#xff0c;FileExistCorrect表示文件在且正确&#xff0…

如何进行景气分析

景气分析是一种短期经济分析方法。主要分析短时间内&#xff08;一般指一年内&#xff0c; 或几个月内&#xff09;经济运行的态势&#xff0c;包括当前的状态和未来的趋势。景气分析可以为宏观经济政策提供重要的决策与参考信息&#xff0c;例如根据经济运行的方向、强弱可建议…

概念理解: DDR的寻址容量设计

主要内容&#xff1a;DDR寻址容量设计的概念理解示例。 DDR的数据存储在不同的bank上&#xff0c;你知道具体是如何通过数据总线和地址总线的配合&#xff0c;拿到所需的数据吗&#xff1f;通过下面这样一个简单的问题&#xff0c;我们来逐渐了解这个过程的实现。 DDR…