JAVA(IO流-字符流)day 7.30

news2024/11/27 10:41:01

ok了家人们今天继续学习IO流,

.字符集

使用字节流输出中文可能有乱码。

因为每次读取的字节没有完全读取一个字的字节。

.字符流

2.1 字符输出流【Writer】(抽象类)

Writer是所有字符流的超类(父类)

字符输出流 Writer 类的常用方法
public void write(int c):写出一个字符
。
public void write(char[] cbuf):将 b.length字符从指定的字符
数组写出此输出流。

public abstract void write(char[] b, int off, int len):从指定的
字符数组写出 len字符,从偏移量 off开始输出到此输出流。
 
public void write(String str) :写出一个字符串
。
public void write(String str,int off,int len):写出一个字符串的
一部分。

public abstract void close():关闭流,释放资源,但是在关闭
之前会先刷新流。一旦关闭,就不能再写数据。

public abstract void flush():刷新流,还可以继续写数据。

2.2 FileWriter

FileWriter类是Writer的子类,默认使用UTF-8,和字节缓冲区。

FileWriter类的构造方法

FileWriter(File file):创建一个新的 FileWriter,给定要读取的File对
象。
 
FileWriter(String fileName):创建一个新的 FileWriter,给定要读
取的文件的名称。 

FileWriter(File file,boolean append): 创建一个新的 FileWriter,
追加写入。 

FileWriter(String fileName,boolean append): 创建一个新的
FileWriter,追加写入。

FileWriter fw = new FileWriter("文件路径");

fw.write(int/String);
fw.write("\r\n");//换行符

char[] chars = {内容};
fw.write(chars);

fw.close();
//续写
FileWriter fw = new FileWriter("文件路径",true);

fw.write(内容);

fw.close();
flush :刷新缓冲区,流对象可以继续使用。
//刷新流
FileWriter fw = new FileWriter("文件路径",true);

fw.write(内容);

fw.flush();

fw.wirte(内容);

fw.close();

2.3 字符输入流【Reader】(抽象类)

Reader是读取字符流的所有超类(父类)

字符输入流Reader类的常用方法

public int read():每次可以读取一个字符的数据,读取到文件末
尾,返回-1。 返回字符数据的编码值。

public int read(char[] cbuf):一次最多读取cbuf.length个字符数
据,并把读取的字符数据存储到cbuf数组中。返回实际读取到的字
符数据个数。 读取到文件末尾返回:-1

2.4  FileReader类

FileReaderReader的子类,用于读取字符文件,默认使用UTF-8和字符缓冲区。

FileReader(File file): 创建一个新的 FileReader ,给定要读取的
File对象。 

FileReader(String fileName): 创建一个新的 FileReader ,给定要
读取的文件的名称。

FileReader fr = new FileReader("文件路径");

fr.read();

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

fr.close

char数组

FileReader fr = new FileReader("文件路径");

char[] chars = new char[];

int len;

while((len=fr.read())!=-1){
    String str = new String(chars,0,len)
    System.out.println(str);
}

fr.close();

.字符缓冲流

3.1 字符缓冲流概述

只具备缓冲区

字符缓冲流的构造方法

public BufferedReader(Reader in):创建一个 新的缓冲输入
流。
public BufferedWriter(Writer out): 创建一个新的缓冲输出
流。

String src = "文件路径";
String dest = "文件路径";
BufferedReader br = new BufferedReader(new FileReader(src));

BufferedWriter bw = new BufferedWriter(new FileWirter(dest));

 char[] cbuf=new char[1024];

       int len;
       while( (len=br.read(cbuf))!=-1){
           bw.write(cbuf,0,len);
      }

       //关闭流
       br.close();
       bw.close();

3.2 字符缓冲流复制纯文本文件

需求:将 斗罗大陆 .txt’ 复制到当前模块下 ‘copy.txt’
import java.io.*;

public class dm02 {
    public static void main(String[] args) throws Exception {
        String src = "java_0729\\dldl.txt";
        BufferedReader br = new BufferedReader(new FileReader(src));

        String str = "java_0729\\copy.txt";
        BufferedWriter bw = new BufferedWriter(new FileWriter(str));

        char[] chars = new char[1024];
        int len;
        while ((len=br.read(chars))!=-1){
            bw.write(chars,0,len);
        }
        br.close();
        bw.close();
    }
}

3.3 字符缓冲流特有功能

BufferedReader:public String readLine(): 读取文件一行数据,
不包含换行符号 , 读到文件的末尾返回null。
BufferedWriter:public void newLine(): 写一个行分隔符,会
根据操作系统的不同,写入不同的行分隔符。
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;

public class dm03 {
    public static void main(String[] args) throws Exception {

        String src = "java_0729\\a.txt";
        BufferedReader br = new BufferedReader(new FileReader(src));

        String dest = "java_0729\\b.txt";
        BufferedWriter bw = new BufferedWriter(new FileWriter(dest));

        String str = br.readLine();
        //33,23,44,55,09,98,77,31,52,10
        System.out.println(str);

        String[] strs = str.split(",");
        //[33, 23, 44, 55, 09, 98, 77, 31, 52, 10]
        System.out.println(Arrays.toString(strs));

        int[] arr = new int[strs.length];
        for (int i = 0; i < strs.length; i++) {
            String s = strs[i];
            int num = Integer.parseInt(s);
            arr[i] = num;
        }
        //排序
        Arrays.sort(arr);
        //[9, 10, 23, 31, 33, 44, 52, 55, 77, 98]
        System.out.println(Arrays.toString(arr));

        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            bw.write(arr[i]+" ");
            count++;

            if (count%5==0){
                bw.newLine();
            }
        }
        br.close();
        bw.close();
    }
}

.转换流

FileReader 类 默认是UTF-8编码表,
由于 Windows 系统的默认是 ANSI编码
可能会出 现乱码。
        
import jdk.internal.util.xml.impl.Input;

import java.io.*;

public class dm04 {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("D:/2.txt");
        InputStreamReader isr = new InputStreamReader(fis,"GBK");

        int len;
        while ((len=isr.read())!=-1){
            System.out.print((char)len);//���
            //在InputStreamReader加入"GBK"之后,输出 你好
        }
        fis.close();
        isr.close();
    }
}

4.1 InputStreamReader

InputStreamReader类是Reader的子类,字符集可以指定,也可以使用IDEA默认UTF-8的字符集。

InputStreamReader 类的构造方法
InputStreamReader(InputStream in): 创建一个使用默认字符集
的字符流。
InputStreamReader(InputStream in, String charsetName): 创
建一个指定字符集的字符流。

InputStreamReader isr01 = new InputStreamReader(new FileInputStream("关联文件"));
InputStreamReader isr02 = new InputStreamReader(new FileInputStream("关联文件") , "GBK");

4.2 OutputStreamWriter

OutputStreamWriter类是Writer的子类,它的字符集和InputStreamReader类一样,可以指定

也可以使用IDEA默认UTF-8的字符集。

OutputStreamWriter类的构造方法

OutputStreamWriter(OutputStream in): 创建一个使用默认字
符集的字符流。 idea默认的是utf8
OutputStreamWriter(OutputStream in, String charsetName):
创建一个指定字符集的字符流。

OutputStreamWriter isr = new OutputStreamWriter(new
FileOutputStream("关联文件"));
OutputStreamWriter isr2 = new OutputStreamWriter(new
FileOutputStream("关联文件") , "GBK");

4.3 转换流的作用

windows默认的字符集为gbk,idea的字符集为UTF-8,

我们在读取windows文件时,会出现乱码,

这种情况我们就可以用转换流去指定字符集,就可以读取文件内容。

public class DemoTest {
   public static void main(String[] args) throws
IOException {
       //创建输出流,指定关联文件的编码表名字
       String dest="文件路径";
       OutputStreamWriter osw=new
OutputStreamWriter(new
FileOutputStream(dest),"GBK");//指定字符集为”gbk“(默认大小写一样)
       //写入数据
       osw.write("今天晚上要上课");
       //关闭流
       osw.close();
       //创建输入流,指定关联文件的编码表名字
       String src="文件路径";
       InputStreamReader isr = new
InputStreamReader(new FileInputStream(src),"GBK");//指定字符集为”gbk“
       //读数据
       int len;
       while((len=isr.read())!=-1){
           System.out.println((char)len);
      }
       //关闭流
       isr.close();
  }
}

.对象操作流

5.1 对象操作流概述

        可以把读取的对象以字节的形式读取到文件中

对象操作输入流(ObjectInputStream)
对象操作输出流(对象序列化流):就是将对象写到本地文件中,
或者在网络中传输对象
操作输出流(ObjectOutputStream)
对象操作输入流(对象反序列化流):把写到本地文件中的对象读
到内存中,或者接收网络中传输的对象。

5.2 ObjectOutputStream类(序列化流)

Java 对象的原始数据类型写出到文件, 实现对象的持久存储。
ObjectOutputStream 类构造方法
public ObjectOutputStream(OutputStream out) : 创建一个
指定OutputStream的ObjectOutputStream

ObjectOutputStream oos = 
                    new ObjectOutputStream(new FileOutputStream("文件地址"));

FileOutputStream fileOut = 
                    new FileOutputStream("文件地址");
ObjectOutputStream out =
                    new ObjectOutputStream(fileOut);
ObjectOutputStream 类序列化操作
必须实现 .Serializable 接口,它是一个(标记)接口
不实现的话就会报异常  j ava.io.NotSerializableException
public final void writeObject (Object obj) : 将指定的对象写
出。

5.3 ObjectInputStream类(反序列化流)

ObjectInputStream 类的概述
将序列化之后的文件写为对象(恢复为对象)
ObjectInputStream 类构造方法
public ObjectInputStream(InputStream in) : 创建一个指定
InputStream的

ObjectInputStream ois = 
                      new ObjectInputStream(new FileInputStream("文件路径"));
ObjectInputStream 类反序列化操作
public final Object readObject () : 读取一个对象。

ObjectInputStream ois = 
                      new ObjectInputStream(new FileInputStream("文件路径"));

        User user = (User)ois.readObject();



5.4 序列化集合

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;


public class dm10 {
    public static void main(String[] args) throws Exception {
        String dest = "文件路径";
        ObjectInputStream ois =
                new ObjectInputStream(new FileInputStream(dest));



        ArrayList<User> list  = (ArrayList<User>) ois.readObject();
        for (User user : list) {
            System.out.println(user.getName()+"..."+user.getAge()+"..."+user.getAddress());
        }
        ois.close();
    }
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;

public class dm09 {
    public static void main(String[] args) throws Exception {


        String src = "文件路径";
        ObjectOutputStream oos =
                new ObjectOutputStream(new FileOutputStream(src));

        ArrayList<User> list = new ArrayList<>();

        User user01 = new User();
        user01.setName("张三");
        user01.setAge(23);
        user01.setAddress("北京");

        User user02 = new User();
        user02.setName("李四");
        user02.setAge(24);
        user02.setAddress("上海");
        list.add(user01);
        list.add(user02);

        oos.writeObject(list);
        oos.close();
    }
}

5.5 序列化和反序列化注意事项

private static final long serialVersionUID = 42L;  

ok了家人们明天见。

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

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

相关文章

蚓链数字化营销系统:“爆省”!“爆赚”!“爆值”!“爆快”!“爆增”!“爆享”!

随着信息技术的飞速发展和消费者行为的深刻变化&#xff0c;数字化营销已成为企业在市场竞争中取得优势的关键手段。蚓链数字化营销系统凭借其创新的功能和策略&#xff0c;为企业带来了一系列“爆”优势&#xff01; “按效果付费--信息化建设费用爆省”&#xff01; “按效果…

Win11没有记事本怎么办?更新至win11无法右键新建txt文件?

博主更新至Win11系统后目前用了不到一个月时间&#xff0c;今天突然发现 鼠标右键无法新建txt文件 了&#xff0c;一开始还以为Win11系统不支持txt类型文件&#xff0c;遂查找各种网上恢复教程。本文综合了多篇教程的方法&#xff0c;力求一文解决所有可能出现的情况&#xff0…

网络安全是什么?怎么入门网络安全?

一、网络安全的定义 网络安全&#xff0c;简单来说&#xff0c;就是保护网络系统中的硬件、软件以及其中的数据不因偶然或恶意的原因而遭到破坏、更改、泄露&#xff0c;保障系统连续可靠正常地运行&#xff0c;网络服务不中断。 随着信息技术的飞速发展&#xff0c;网络安全的…

JAVA基础 - 网络编程

目录 一. 网络基础 BS&#xff08;Browser/Server&#xff0c;浏览器/服务器架构&#xff09; CS&#xff08;Client/Server&#xff0c;客户端/服务器架构&#xff09; 二. TCP Socket通信 三. Socket类 四. 聊天实例 五. UDP Socket 六. 数据交换格式 一. 网络基础 网…

力反馈设备在远程机器人遥操作中的应用实例

随着科技的飞速发展&#xff0c;力反馈设备在远程机器人遥操作中的应用日益广泛&#xff0c;极大地提升了操作的精确性和安全性。其中&#xff0c;Haption Virtuose 6D力反馈设备以其卓越的性能成为该领域的佼佼者。 Haption Virtuose 6D力反馈设备医疗遥操作应用 在医疗领域&a…

公布一批脸书爬虫(facebook)IP地址,真实采集数据

一、数据来源&#xff1a; 1、这批脸书爬虫&#xff08;facebook&#xff09;IP来源于尚贤达猎头公司网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“facebook”和IP核实。…

谷粒商城实战笔记-92~96-商品发布和查询

文章目录 Spu列表检索接口。Sku列表检索接口。仓库列表接口。问题记录 这一篇包含如下内容&#xff1a; 92-商品服务-API-新增商品-商品保存其他问题处理93-商品服务-API-商品管理-SPU检索94-商品服务-API-商品管理-SKU检索95-仓储服务-API-仓库管理-整合ware服务&获取仓库…

【云原生】Kubernetes中的定时任务CronJob的详细用法与企业级应用案例分享

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

皮尔逊(Person)相关系数

目录 一、总体和样本 二、总体皮尔逊相关系数 三、样本皮尔逊相关系数 四、皮尔逊相关系数的理解误区 五、总结 六、相关系数大小的解释&#xff08;并不严格&#xff09; 七、皮尔逊相关系数的计算 一、总体和样本 二、总体皮尔逊相关系数 三、样本皮尔逊相关系数 四、…

Java并发之ThreadLocal

1. 简介 ThreadLocal是 Java 中提供的一种用于实现线程局部变量的工具类。它允许每个线程都拥有自己的独立副本&#xff0c;从而实现线程隔离&#xff0c;用于解决多线程中共享对象的线程安全问题。 通常&#xff0c;我们会使用 synchronzed 关键字 或者 lock 来控制线程对临…

iPhone 手机如何查看自己的电话号码?这两种方法都可以

设置应用程序查看 第一种查看自己的电话号码的方法是在设置应用程序中的电话选项中查看当前手机的电话号码&#xff0c;下面是具体的操作步骤&#xff1a; 首先我们先打开设置应用程序&#xff0c;然后往下滑动找到电话选项&#xff0c;点击进入。 然后就可以看见界面中有“本…

【100个深度学习实战项目】目标检测、语义分割、目标追踪、图像分类等应有尽有,持续更新~~~

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 引言 本文主要介绍深度学习在各…

智能城市管理系统设计思路详解:集成InfluxDB、Grafana和MQTTx协议(代码示例)

引言 随着城市化进程的加快&#xff0c;城市管理面临越来越多的挑战。智能城市管理系统的出现&#xff0c;为城市的基础设施管理、资源优化和数据分析提供了现代化的解决方案。本文将详细介绍一个基于开源技术的智能城市管理系统&#xff0c;涵盖系统功能、技术实现、环境搭建…

【扒模块】DFF

图 医学图像分割任务 代码 import torch import torch.nn as nnfrom timm.models.layers import DropPath # 论文&#xff1a;D-Net&#xff1a;具有动态特征融合的动态大核&#xff0c;用于体积医学图像分割&#xff08;3D图像任务&#xff09; # https://arxiv.org/abs/2403…

[C#]基于wpf实现的一百多种音色的Midi键盘软件

键盘 音色库 源码地址&#xff1a;https://download.csdn.net/download/FL1623863129/89599322

前端必知必会-html表单的基本使用

文章目录 HTML 表单<form> 元素<input> 元素文本字段<label> 元素单选按钮复选框提交按钮<input> 的 Name 属性总结 HTML 表单 HTML 表单用于收集用户输入。用户输入通常发送到服务器进行处理。 <form> 元素 HTML <form> 元素用于创建 H…

无人机环保行业解决方案-河道自动巡检

搭配大疆机场&#xff0c;智能化巡检 轻量一体化设计 相较于其他市面产品&#xff0c;大疆机场更加小巧&#xff0c;占地面积不足1平方米。 展开状态&#xff1a;长1675 mm&#xff0c;宽895 mm&#xff0c;高530mm&#xff08;不含气象站&#xff09; 闭合状态&#xff1a;…

C++之引用(详解,引用与指针的区别)

目录 1. 引⽤的概念和定义 2. 引⽤的特性 3. 引⽤的使⽤ 4. const引⽤ 5. 指针和引⽤的关系 1. 引⽤的概念和定义 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名(相当于是给变量起了个外号)&#xff0c;编译器不会为引⽤变量开辟内存空间&#xff0c;它…

冷月大佬的EVA-GAN: 可扩展的音频生成GAN结构-论文阅读笔记

前言&#xff1a; 最近在调研asr和tts相关的内容&#xff0c;准备开始学习相关的经典工作&#xff0c;为了倒逼自己学进脑子&#xff0c;我尝试将这些看到的一些好的学习笔记分享出来。 萌新学徒&#xff0c;欢迎相关领域的朋友推荐学习路径和经典工作&#xff01;拜谢&#x…

idea 配置 Tomcat

一、状态栏找到 “ Preferences ” 二、 搜索栏输入“application”——>“Application Servers”——>“”号 三、 点击“Tomcat Sever” 四、 选择电脑中Tomcat所在位置——>OK 五、状态栏——>Run——>Edit Configurations 六、 点击&#xff1a;“ ”号 七…