首页 > 其他分享 >10.IO

10.IO

时间:2024-11-29 11:14:29浏览次数:3  
标签:10 字节 read int IO new close 序列化

IO流

image-20241122171031896

image-20241122171341877 image-20241122171402148

字节流:所有类型文件

字符流:纯文本文件

字节流

InputStream

FileInputStream

 FileInputStream fis = new FileInputStream("C:\\Users\\Lenovo\\Desktop\\javase\\a.txt");

        int b;
        while((b=fis.read())!=-1){
            System.out.println((char)b);
        }

	fis.close();
  1. 创建字节输入流对象

​ 如果文件不存在,就直接报错。

  1. 读数据

​ read()一次读一个字节数据,读出来的是ASCII数字。

​ read(byte[] b) 一次读一个字节数组数据

​ read() 读取一次数据移动一次指针

​ 读到末尾read方法返回-1

  1. 释放资源

OutputStream

字节输出流

FileOutputStream

FileOutputStream fos=new FileOutputStream("C:\\a.txt",true);//创建字节输出流对象  默认为true,为false则会清空内容
        fos.write(91);//写数据
        fos.close();//释放资源
  1. 创建字节输出流对象。

    文件不存在会创造新的文件,必须父级路径正确。

    如果文件已经存在,会清空数据。如果不想清空打开续写开关。

  2. 写数据。

​ write(int b) 一字节

​ write(byte[]b)一数组

​ write(byte[]b,int off,int len) 一数组的部分

​ str.getBytes();字符串转换为byte[]

  1. 释放资源。

换行 \r\n

拷贝

FileInputStream fis = new FileInputStream("C:\\Users\\Lenovo\\Desktop\\javase\\a.txt");
FileOutputStream fos=new FileOutputStream("com\\copy.txt");
int b;
while((b=fis.read())!=-1){
    fos.write(b);
}
fos.close();
fis.close();

捕获异常

ctrl alt T。一般异常抛出

FileInputStream fis = null;//进行初始化
FileOutputStream fos = null;
try {
    fis = new FileInputStream("C:\\Users\\Lenovo\\Desktop\\javase\\a.txt");
    fos = new FileOutputStream("com\\copy.txt");
    int b;
    while ((b = fis.read()) != -1) {
        fos.write(b);
    }

} catch (IOException e) {
    throw new RuntimeException(e);
} 

Unicode

UTF-8是一种编码规则。

英文按照1字节表示字母,中文按照3字节表示汉字。

缓冲流

BufferedInputStream

BufferedOutputStream

自带8192的缓冲区,基本流包装成高级流,提高读取数据的性能。

BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\Lenovo\\Desktop\\javase\\a.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:\\Users\\Lenovo\\Desktop\\javase\\b.txt"));
int b;
while((b=bis.read())!=-1){
    bos.write(b);
}
bos.close();
bis.close();

byte[] bytes = new byte[1024];
int len;
while((len=bis.read(bytes))!=-1){
    bos.write(bytes,0,len);
}
bos.close();
bis.close();

序列化流

序列化流

ObjectOutputStream,对象操作输出流

把对象序列化到文件中去

ObjectInputStream(OutputStream out)//把基本流变为高级流
writerObject(Object obj)		//把对象序列化到文件中去
    Student stu=new Student("quqi",21);
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(""));
        oos.writeObject(stu);
        oos.close();

但需要在student类中implements序列化接口,该接口没有抽象方法,是标记接口

反序列化流

ObjectInputStream,对象操作输入流

可以将序列化到本地文件中的对象,读取到程序中

ObjectInputStream(InputStream out)//把基本流变为高级流
readObject()//可以将序列化到本地文件中的对象,读取到程序中
//1. 创建反序列化流对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(""));

//2. 读取数据
Object o=ois.readObject();
//3. 打印对象
//4. 释放资源
ois.close();

如果需要把JavaBean的对象序列化到本地文件中,需要学生类继承序列化接口,alt加回车使用序列化版本ID。

image-20241128195830620

字符流

Reader

FileReader

  1. 创建字符输入流对象
FileReader(File file);
FileReader(String pathname);
  1. 读取数据

​ read( )一次读一个数据。//直接读取解码成十进制,把十进制作为返回值。

​ read(char[] buffer) 一次读一多个数据。//读取数据,解码,强转合并,把强转后的字符放入数组中。(比空参多了类型转换)

​ 读取一次数据移动一次指针,读到末尾read方法返回-1

  1. 释放资源
FileReader fr=new FileReader("C:\\a.txt");
fr.read();//会把文件中的数据放入缓冲区(8192字节数组)
FileWriter fw=new FileWriter("C:\\a.txt");//清空文件
//请问会再次获得数据吗?
int ch;
while((ch=fr.read())!=-1){
    System.out.println((char)ch);//先读取缓冲区中的数据
}
fw.close();
dr.close();

image-20241128163345719

Writer

FileWriter

FileWriter fw=new FileWriter("C:\\a.txt",true);
        fw.write(25105);//写数据
        fw.close();//释放资源
  1. 创建字节输出流对象。

    文件不存在会创造新的文件,必须父级路径正确。

    如果文件已经存在,会清空数据。如果不想清空打开续写开关。

  2. 写数据。

​ write(int c) 一字符

​ write(String str)一字符串

​ write(String str,int off,int len) 一数组的部分

​ str.getBytes();字符串转换为byte[]

  1. 释放资源。

缓冲区写入文件的时刻:

  1. 缓冲区满,加入新的数据

    1. 使用flush()将缓冲区中的数据刷新入本地文件
      2. close()释放资源/关流

缓冲流

BufferedReader:readLine()

BufferedWriterer:newLine()

转换流

是字节流和字符流转换的桥梁

InputStreamReader,OutputStreamReader

ctrl+p为显示参数

要求:利用字节流读取文件数据,每一次读一行,而且不能出现乱码。

  1. 字节流读取中文时候时会出现乱码的,但是字符流可以搞定。
  2. 字节流里面没有读一行的方法,只有字符缓冲流可以搞定。
  FileInputStream fis=new FileInputStream("");//字节流
       InputStreamReader isr=new InputStreamReader(fis);//转换流为字符流

        BufferedReader br=new BufferedReader(isr);//字符流转换为缓冲流
   //     String str=br.readLine();
   //    System.out.println(str);
   //    br.close();
		String line;
		while((line=br.readLine())!=null){
            System.out.println(line);  
        }
		br.close();

打印流

特点:打印流只操作文件目的地,不操作数据源(不能读,只能写。)

数据原样写入写出。

特有写出方法,可以自动刷新,自动换行。

字节打印流

PrintStream

image-20241128201933546 image-20241128202046882

字节流底层没有缓冲区,开不开自动刷新都一样。默认自动刷新

//1. 创建字节打印流对象
PrintStream ps=new PrintStream(new FileOutputStream(""),true, Charset.forName("UTF-8"));
//2. 写出数据
ps.println(97);//写出+自动刷新+自动换行
ps.print(true);
ps.printf("%s 喜欢 %s","anzi","quqi");
//3. 释放资源
ps.close();

字符打印流

PrintWriter

image-20241128202717918 image-20241128202741181

字符流底层有缓冲区,可以手动打开自动刷新。

//1. 创建字符打印流对象
PrintWriter pw=new PrintWriter(new FileWriter(""),true, Charset.forName("UTF-8"));
//2. 写出数据
pw.println(97);//写出+自动刷新+自动换行
pw.print(true);
pw.printf("%s 喜欢 %s","anzi","quqi");
//3. 释放资源
pw.close();

特殊的打印流:虚拟机启动时候自动创建,标准输出流。

PrintStream ps=System.out;

ps.println();//写出+自动刷新+自动换行
image-20241128203337176

常用工具包

Commons-io

标签:10,字节,read,int,IO,new,close,序列化
From: https://www.cnblogs.com/cookiesDing/p/18576141

相关文章

  • Cause: org.apache.ibatis.binding.BindingException: Parameter ‘username‘ not fo
    原因 :Availableparametersare[arg1,arg0,param1,param2]需要标识参数未找到错误解决办法    方法1.在mapper映射文件中:<selectid="checkLogin"resultType="User">select*fromuserwhereusername=#{arg0}andpassword......
  • 2024年快结束了,还在找项目管理软件?10款热门好用的项目管理工具大盘点
    2024年10款热门好用的项目管理软件大盘点在现代项目管理中,进度可视化是确保项目顺利进行的关键因素之一。通过将项目进度以直观的方式呈现,团队成员可以更容易地理解任务分配、时间线以及项目整体状态。本文将介绍十款强大的软件工具,帮助您将项目进度可视化到极致。禅道项目管......
  • 序列到序列的学习 (seq2seq - 词嵌入 - Embedding层 - mask掩码 - 后续会加入注意力机
    目录0.前言1.编码器 (encoder)补充1:词嵌入(WordEmbedding)补充2:嵌入层(EmbeddingLayer)2.解码器(decoder)3.损失函数4.训练5.预测6.预测序列的评估(BLEU)7.小结0.前言课程全部代码(pytorch版)已上传到附件本章节为原书第9章(现代循环网络),共分为8......
  • 2024年不同行业都适用的10款项目管理工具推荐,总有一款适合你!
    在当今快节奏的商业环境中,项目管理工具的选择对于项目的成功至关重要。不同的行业和项目类型需要不同的工具来满足其特定的需求。本文将介绍10款适用于不同行业的项目管理工具,帮助您在2024年找到最适合您项目的解决方案。禅道项目管理软件 禅道项目管理软件是一款开源的项......
  • 20222410 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容1.1本周学习内容回顾1.2实验要求本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程2.1简单应用SET工......
  • win10设置莫名其妙无法打开,或许可以这样解决
    我尝试了网上的很多解决方法,很遗憾都没有成功。也许是故障原因不同,这些方法并不适用。在重装系统之前或许还可以试试更新win10系统。由于设置打不开,因此只能手动更新系统。1.查看对应版本的最新更新情况:Windows10-releaseinformation|MicrosoftLearn下图为win1022H2的......
  • 国产系统(麒麟V10、uos)使用pageoffice在线编辑office文件
    本文描述了PageOffice产品在(VUE+Springboot)前后端分离的项目中如何集成调用。一、环境前端:vue2后端:springboot2、jdk1.8如果是springboot3,jdk17及以上版本,用这个依赖:<dependency><groupId>com.zhuozhengsoft</groupId><artifactId>pageoffice</artifactId><ver......
  • Andriod SDK安装教程
    前言最简单的方式我们使用ANDROIDSTUDIO这款开发工具下载对应的AndriodSDK。可是我们如果不开发安卓,只是用它的一些SDK包的话而安装整个开发工具,就没必要了。这里讲的是用独立的命令行工具来操作。下载命令行工具点击此处进入下载页面,滑动到最下边,选择合适的系统下载,我......
  • 【JMeter性能测试框架篇】Win10下搭建JMeter+Influxdb+Grafana可视化性能测试监控平台
    一、前言        平常使用jmeter进行性能测试时,工具自带的监控方式无法清晰直观的查看结果,给我们性能测试带来很多不便。因此我们需要搭建一个可视化性能测试监控平台来实时监控性能测试结果,这里我们采用JMeter+Influxdb+Grafana开源免费框架来实现。二、实现原理通......
  • CSP/信奥赛C++语法基础刷题训练(33):洛谷P1055:[NOIP2008 普及组] ISBN 号码
    CSP/信奥赛C++语法基础刷题训练(33):洛谷P1055:[NOIP2008普及组]ISBN号码题目描述每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括999位数字、......