Java学习笔记(21)

news2024/9/22 23:24:12

IO流

字节流 字符流

纯文本文件

Fileoutputstream

注意点

如果不释放资源,java会一直占用该文件,外部无法删除掉该文件

写数据

换行写

用字符串的getBytes()得到字符数组

\r\n

续写

Fileinputstream

Read

一次只读一个字符,返回int类型,对应ASCII码表,如果读不到,返回-1

没读一次,读取的指针就会移动到下一个字符

循环读取

文件拷贝

注意先开的,最后关闭

一次读一个字节

拷贝小文件快一点,大文件很慢

public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("day28\\a.txt");

        FileOutputStream fos = new FileOutputStream("day28\\b.txt");

        int b;

        while ((b = fis.read()) != -1){

            fos.write(b);

        }

        fos.close();

        fis.close();

}

一次读多个字节

注意数组会残留数据

数组中会残留d

所以在写的时候,写入新读取到的数据

Try catch 释放资源太麻烦

注意创建流对象一定是autocloseable接口的实现类

GBK字符集 国产

为什么一定以1开头?

区分开中英文

直接解码

Unicode字符集

UTF-8编码规则

英文 一个字节存

中文 三个字节存

字节流读中文出现乱码

读取的时候,可能由于解码和编码所使用的不是同一种方式,所以会乱码

但拷贝的时候,是把所有字节都复制下来了,不会有数据的丢失,不会有乱码

Idea默认UTF-8

字符流

底层是字节流

Filereader filewriter

Filereader

要记得强转

不强转就返回解码完的十进制数字,这个数字就是对应字符集上的数字

空参read()原理:要手动强转

带参read()原理:空参read+自动类型转换

Filewriter

字符流底层原理

输入流

创建缓冲区(长度为8192的字节数组),字节流没有缓冲区

缓冲区:提高读取效率

如果此时已经读到缓冲区没有数据,会再次回到文件里看还有没有剩余的数据,如果也没有,则返回-1;

如果有,则继续读取数据,装缓冲区,会把之前的数据直接覆盖掉,有多少数据就覆盖多少,如果剩下的数据不够覆盖8192个字节,则剩下的数据还是之前已经读到的数据,这些就不会被覆盖。

98~104是新数据,97是上一次存入缓冲区的数据

缓冲区中的数据不会随着文件清空而消失

字符输出流底层原理

情况1:

缓冲区装第8193个数据时,就会自动输出缓冲区中的所有数据

如果不够8193个,就不会输出

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

package exercise;

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

public class exercise5 {
    public static void main(String[] args) throws IOException {
        copyFile("day27\\src\\aaa", "day28\\src");
    }

    private static void copyFile(String path, String copyPath) throws IOException {
        File f = new File(path);
        File newFile = new File(copyPath, f.getName());
        boolean bb = newFile.mkdir();
        
        File[] files = f.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    //如果是文件,直接拷贝
                    FileInputStream fis = new FileInputStream(file.getPath());
                    FileOutputStream fos = new FileOutputStream(new File(newFile.getPath(), file.getName()));
                    byte[] b = new byte[1024 * 1024 * 5];
                    int len;
                    while ((len = fis.read(b)) != -1) {
                        fos.write(b, 0, len);
                    }
                    fos.close();
                    fis.close();
                } else {
                    //如果是文件夹,拷贝新的文件夹
                    copyFile(file.getPath(), new File(copyPath, f.getName()).getPath());
                }
            }
        }
    }
}

一个字节异或一个数字两次,就会得到原数字,利用这个特性进行加密解密

异或:^

package exercise;

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

public class exercise6 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("day28\\src\\aaa\\a.txt");
        FileOutputStream fos = new FileOutputStream("day28\\src\\aaa\\aEnc.txt");
//        FileOutputStream fos = new FileOutputStream("day28\\src\\aaa\\aDec.txt");
        byte[] b = new byte[1024 * 1024 * 5];
        int len;
        while ((len = fis.read()) != -1) {
            fos.write(len ^ 10);
        }
        fos.close();
        fis.close();
    }
}

package exercise;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

public class exercise7 {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("day28\\src\\aaa\\b.txt");
        FileWriter fw = new FileWriter("day28\\src\\c.txt");
        StringBuilder sb = new StringBuilder();
        int ch;
        while ((ch = fr.read()) != -1) {
            sb.append((char) ch);
        }

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

        String s = Arrays.toString(arr).replace(", ", "-");
        fw.write(s.substring(1, s.length() - 1));

        fw.close();
        fr.close();

    }
}

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

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

相关文章

深入解析ECC(椭圆曲线密码学)加解密算法

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 本文将详细介绍ECC(椭圆曲线密码学)加解密算法的原理、特点及应用。ECC作为一种新型的公钥密码体制&#…

低压扫描电镜(LVSEM)为主流低压电子显微镜产品 未来需向多功能方向发展

低压扫描电镜(LVSEM)为主流低压电子显微镜产品 未来需向多功能方向发展 低压扫描电子显微镜,简称低压扫描电镜,英文简称LVSEM,是一种在较小加速电压条件下工作的、利用低能电子束扫描样品进行成像的电子显微镜。低压扫…

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型 生成式人工智能的采用率显着上升。 在 2022 年 OpenAI ChatGPT 推出的推动下,这项新技术在几个月内就积累了超过 1 亿用户,并推动了几乎所有行业的开发活动激增。 到 2023 年,开发人员…

图像抠图DIS——自然图像中高精度二分图像抠图的方法(C++/python模型推理)

概述 DIS(Dichotomous Image Segmentation)是一种新的图像分割任务,旨在从自然图像中分割出高精度的物体。与传统的图像分割任务相比,DIS更侧重于具有单个或几个目标的图像,因此可以提供更丰富准确的细节。 为了研究…

cuda安装和下载for windows

cuda下载 英伟达cuda官方下载地址 https://developer.nvidia.com/cuda-downloads?target_osWindows&target_archx86_64&target_version11&target_typeexe_local 安装 直接一直点下一步即可,注意要注册账号,用微信扫码直接登录即可 win…

一篇文章给你讲清楚正常卷积与深度可分离卷积

文章目录 正常卷积深度可分离卷积深度卷积逐点卷积 对比代码实现查看(torch实现)结果 正常卷积 也就是我们平常用的比较普遍的卷积: 它的参数量是:112,即: ( 卷积核大小) ∗ 输入通道 ∗ 输出…

【随笔】Git -- 常用命令(四)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

【python】flask模板渲染引擎Jinja2,使得前后端交互更加便捷

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

2010年之前电脑ubuntu安装nvidia驱动黑屏处理

装好驱动 仿真fps直接到60Hz 陈旧设备 都是非常老旧的电脑,没钱换新电脑,就这么穷…… 电脑详细配置: 冲动 想装显卡驱动提升一下性能,结果……黑了 黑习惯了也无所谓,几分钟就能解决,关键还是太穷&…

【C】盛最多水的容器(双指针)

盛最多水的容器 原题目链接:点击跳转 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和(i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说…

数据结构-树-006

1二叉树 1.1目标二叉树 前序遍历:ABDHIEJCFKG 中序遍历:HDIBEJAFKCG 后序遍历:HIDJEBKFGCA 层序遍历:ABCDEFGHIJK运行结果: 运行结果符合目标二叉树的深度优先(前序遍历,中序遍历,…

【c++】【STL】stack类、queue类、deque类详解及模拟

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今日主菜:stack和queue,deque类 主厨:邪王真眼 所属专栏:c专栏 主厨的主页:Chef‘s blog 这可是…

Endnote(作者,年份)文中引用显示‘and etal‘与‘和 等‘

软件版本:Endnote X9.1,样式:Harvard,其余使用(作者,年份)的样式均可,GBT7714就有作者年份类型 本教程适用于X系列~ Endnote20及以上版本请移步另一条博文,指路:(我还没…

“双碳”目标下资源环境中的可计算一般均衡(CGE)模型教程

原文链接:“双碳”目标下资源环境中的可计算一般均衡(CGE)模型https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx4&sn82ea6c6f506cd20d1e0cd590faaa0611&chksmfa820200cdf58b16dc5b79746901cc9a4048b46db5…

《自动机理论、语言和计算导论》阅读笔记:p5-p27

《自动机理论、语言和计算导论》学习第2天,p5-p27总结,总计23页。 一、技术总结 1.集合 (1)commutative law of union. (2)distribute law of union. 2.归纳法(induction) & 演绎法(deduction) (1)归纳法:从许多个别的事实或原理中…

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错: 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

LabVIEW焓差试验室流量计现场自动校准系统

LabVIEW焓差试验室流量计现场自动校准系统 在现代工业和科研领域,流量计的准确性对于保证生产过程的质量和效率非常重要。开发了一种基于LabVIEW的焓差试验室流量计现场自动校准系统,通过提高流量计校准的准确性和效率。 在空调器空气焓值法能效测量装…

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时,ip地址填对了,但是仍然报错,说hololens 2没有打开, 首先检查 开发人员选项 都打开,设备门户也打开 然后检查系统–体验共享,把共享都打开就可以了

【k8s】kubeasz 3.6.3 + virtualbox 搭建本地虚拟机openeuler 22.03 三节点集群 离线方案

kubeasz项目源码地址 GitHub - easzlab/kubeasz: 使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响 拉取代码,并切换到最近发布的分支 git clone https://github.com/easzlab/kubeasz cd kubeasz gi…

C++细节

背景知识: 面向对象的编程中,类(Class)是创建对象的蓝图或模板,它包含了数据(通常称为属性或变量)和行为(通常称为方法或函数)。将数据封装为私有(private&am…