Java入门2-idea 第五章:IO流(java.io包中)

news/2024/12/23 18:45:33 标签: java, intellij-idea, 开发语言
一、理解
1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。
2. 分类:
(1) 按方向 ( JVM 虚拟机为参照物 ) 【重点】
        输入流:将< 存储设备 > 中的内容读入到 < 内存 > 中。
        输出流:将< 内存 > 中的内容写入到 < 存储设备 > 中。
(2) 按单位:
        字节流:以字节为单位,可以操作所有类型的文件。
        字符流:以字符为单位,只能操作文本类型的文件。
(3) 按功能:
        节点流:具有基本的读写功能。
        过滤流:在节点流的基础上,增加新的功能。
二、字节流
1. 父类:字节流的父类 ( 抽象类 )
(1) InputStream :字节输入流
        对应的操作为读操作
        功能方法:read 方法
(2) OutputStream: 字节输出流
        对应的操作为写操作
        功能方法:write 方法
2. 字节节点流
(1) FileOutputStream :字节节点输出流 、文件字节输出流
        构造方法:
        FileOutputStream fos = new FileOutputStream("D:\\test56/a.txt");
        参数:代表操作文件的路径,如果指定的文件夹不存在,则运行报错,错误信息为:
        java.io.FileNotFoundException: D:\test5\a.txt (系统找不到指定的路径。 ) ;如果指定的
        文件不存在,系统自动创建
        绝对路径:盘符:\\ 文件夹 \\ 文件
        相对路径:文件夹/ 文件,默认在当前的项目中查找对应的文件夹内容
  功能方法 :
        write(int n):将单个字节写入文件中
        close():关闭流
(2) FileInputStream :文件字节输入流
构造方法:
        FileInputStream fis = new FileInputStream("file/c.txt");
        参数说明:参数代表操作路径,如果指定的文件不存在,则运行报错,错误信息为:
        java.io.FileNotFoundException: file\c.txt (系统找不到指定的文件。 )
功能方法:
        int read():一次性读取一个字节内容,将读取的内容作为返回值返回,达到文件尾部时,返            回-1
        close():关闭流,释放资源
3. 字节过滤流
(1) 过滤流: BufferedOutputStream/BufferedInputStream
        缓冲流, 提高 IO 效率,减少访问磁盘的次数;
        数据存储在缓冲区中,flush 是将缓存区的内容写入文件中,也可以直接 close
java">package testio;

import java.io.*;

public class TestFileCopyBuffered {
    public static void main(String[] args) throws IOException {
        //1.创建文件字节输入+输出流
        //(1)创建文件节点流对象
        FileInputStream fis=new FileInputStream("D:\\LJQ\\原画\\作业\\作业4\\dly.jpg");
        //(2)创建过滤流
        BufferedInputStream bis=new BufferedInputStream(fis);
        //写文件
        FileOutputStream fos=new FileOutputStream("file/buffcopy.jpg");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        //2.边写边读
        while(true){
            int n=bis.read();
            if(n==-1)break;
            bos.write(n);
        }
        //3.关闭流
        bis.close();
        bos.close();
    }
}

(2) 过滤流: ObjectOutputStream/ObjectInputStream
增强了缓冲区功能
增强了读写 8 种基本数据类型和字符串功能
增强了读写对象的功能 :
readObject() 从流中读取一个对象
writeObject() :写入对象
对象在流上进行传输的过程称为对象序列化。
对象序列化的要求: [ 重点 ]
参与对象序列化的对象对应的类,必须实现 java.io.Serializable 接口
transient 修饰的属性,不参与对象序列化
对象序列化达到文件尾部的标识:
如果运行时抛出 java.io.EOFException ,代表读取的文件达到尾部
对象序列化的细节:
如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的
如果对集合进行对象序列化,必须保证该集合中的所有元素是可序列化的
java">package testio;

import java.io.*;

public class TestObjectOutputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 将对象写入对象
        Student s=new Student("秋",21,1000.0);
        //1.创建文件字节输出流对象
        FileOutputStream fos=new FileOutputStream("file/stu.txt");
        //2.包装过滤流
        ObjectOutputStream oos=new ObjectOutputStream(fos);
        oos.writeObject(s);
        oos.close();
        //读对象
        FileInputStream fis=new FileInputStream("file/stu.txt");
        ObjectInputStream ois=new ObjectInputStream(fis);
        Object o=ois.readObject();
        System.out.println(o);
        ois.close();


    }
}

package testio;
import java.io.Serializable;
class Address implements Serializable{}
public class Student implements Serializable {
        private String name;
        private transient Integer age;
        private Double score;
        private Address a = new Address();
        public Student() {}
        public Student(String name, Integer age, Double score) {
                this.name = name;
                this.age = age;
                this.score = score;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public Integer getAge() {
                return age;
        }
        public void setAge(Integer age) {
                this.age = age;
        }
        public Double getScore() {
                return score;
        }
        public void setScore(Double score) {
                this.score = score;
        }
        @Override
        public String toString() {
                return "Student{" +
                        "name='" + name + '\'' +
                        ", age=" + age +
                        ", score=" + score +
                        '}';
                }
        }
三、字符流
1. 字符流的父类 ( 抽象类 )
        Reader:字符输入流
        对应的操作为读操作
        功能方法:read 方法
        Writer:字符输出流
        对应的操作为写操作
        功能方法:write 方法
2. 文件字符流
(1) FileWriter 文件字符输出流,继承 Writer 中的方法:
     public void write(int n): 将单个字符写入到文件中
(2) FileReader 文件字符输入流,继承 Reader 中的方法:
     public int read(): 一次读取一个字符的内容
3. 字符过滤流
(1) BufferedReader
     功能方法,readLine() :一次性读取一行内容,返回内容为 String ,读取达到尾部,返回 -1
(2) PrintWriter
      println(参数 );
4. 桥转换流
java">package testio2;

import java.io.*;

public class TestInputStreamReader {
    public static void main(String[] args) {
        BufferedReader br=null;
        try{
            //1.创建文件字节流对象
            FileInputStream fis=new FileInputStream("file/k.txt");
            //2.创建桥转换流对象,设置编解码格式
            InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
            //3.创建过滤流
            br=new BufferedReader(isr);
            //4.读操作
            while(true){
                String n=br.readLine();
                if(n==null)break;
                System.out.println(n);
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            if(br!=null){
                try{
                    br.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }

    }
}

java">package testio2;

import java.io.*;

// 桥转换流: ctr+A -> ctr+x -> 设置格式 -> ctr+v ->ctr+s
public class TestOutputStreamWriter {
    public static void main(String[] args) {
        PrintWriter pw = null;
        try {
            FileOutputStream fos = new FileOutputStream("file/my.txt");
            OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");
            pw = new PrintWriter(osw);
            pw.println("嘻嘻");
            pw.println("哈哈");
            pw.print("呵呵");
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(pw !=null) {
                pw.close();
            }
        }
    }
}

四、 File
1. IO 流:对文件中的内容进行操作。 File 类:对文件自身进行操作,例如:删除文件,文件重新命名等。
2. 操作:
java">package testio2;

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

public class TestFile {
    public static void main(String[] args) throws IOException {
        File file = new File("file/hh.txt");
/*System.out.println(file.exists());
file.createNewFile();*/
        if(file.exists()){
            System.out.println("文件存在,则直接使用...");
            FileInputStream fis = new FileInputStream(file);
        }else{
            System.out.println("文件不存在,创建新的文件....");
            file.createNewFile();
        }
    }
}


http://www.niftyadmin.cn/n/5796837.html

相关文章

dify.ai和fastgpt,各有什么优缺点,有什么区别

从专业技术角度来看&#xff0c;Dify.ai 和 FastGPT 的区别可以从 架构设计、技术生态、适用场景和性能优化 四个方面进行深入对比&#xff1a; 1. 架构设计 Dify.ai&#xff1a; 云端优先&#xff1a; 主要基于 SaaS&#xff08;Software as a Service&#xff09;模式&…

VScode 查看linux 内核代码

0&#xff0c;安装c.c 1&#xff0c;查看linux 目录下的linux代码&#xff0c;安装remote ssh 2&#xff0c; 输入服务器IP 3 选择服务器为linux

Linux网络——网络基础

Linux网络——网络基础 文章目录 Linux网络——网络基础一、计算机网络的发展背景1、网络的定义&#xff08;1&#xff09; 独立模式&#xff08;2&#xff09;网络互联 2、局域网 LAN3、广域网 WAN4、比较局域网和广域网5、扩展 —— 域域网和互联网 二、协议1、协议的概念2、…

数据结构与算法学习笔记----匈牙利算法

数据结构与算法学习笔记----匈牙利算法 author: 明月清了个风 first publish time: 2024.12.22 ps⛹️‍♀️这题的算法思路在题目中&#xff0c;没有写在题目前面&#xff0c;注释十分详细 Acwing 861. 二分图的最大匹配 [原题链接](861. 二分图的最大匹配 - AcWing题库) …

信息安全管理与评估赛题第9套

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题九 模块一 网络平台搭建与设备安全防护 1 赛项时间 共计180分钟。 2 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 任务1 网络平台搭建 XX:XX- XX:XX 50 任务2…

【Mybatis-Plus】使用步骤 条件构造器 分页模型

文章目录 Mybatis-Plus使用步骤条件构造器分页模型 Mybatis-Plus MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 需要快速搭建 CRUD 接口的应用程序。对于已…

Docker 部署 新版 Nacos、Seata

Docker 部署 新版 Nacos、Seata 版本说明 名称版本号Nacos2.4.3Seata2.0.0 Nacos 启动容器 # MODEstandalone 系统启动方式: 单机 # NWEzYzdkNmMtZjQ5Ny00ZDY4LWE3MWEtMmU1ZTMzNDBiM2Nh 为 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca 的Base64 编码表示,可以修改&#xff0c;…

基于Matlab的变压器仿真模型建模方法(11):三相三绕组换流变压器的建模仿真

1.概述 换流变压器是直流输电系统中的关键设备,主要负责连接交流和直流系统,并实现电能的转换与传输。换流变压器在直流输电系统中的主要用途包括:传送电力:将电能从交流系统传输到直流系统或从直流系统传输到交流系统;电压变换:把交流系统电压变换到换流器所需的换相电压…