文章目录

  • 0. 老韩带你学英语
  • 1.文件
  • 1.1 文件介绍
  • 1.2 文件流
  • 1.3 流
  • 1.4 输入流
  • 1.5 输出流
  • 1.6 创建文件对象相关构造器和方法
  • 1.7 获取文件相关信息
  • 1.8 常用文件操作
  • 2.IO流原理及流的分类
  • 2.1 IO流分类
  • 3.FileInputStream和FileOutputStream
  • 4.FileReader和FileWriter
  • 4.1 基本介绍
  • 5.节点流和处理流
  • 5.1 基本介绍
  • 5.2 节点流和处理流区别和联系
  • 5.3 处理流的功能主要体现
  • 6.BufferInputStream和BufferedOutputStream
  • 7.BufferedReader和BufferedWriter
  • 8.对象流-ObjectInputStream和ObjectOutputStream
  • 8.1注意事项和细节说明
  • 8.2节点流和处理流
  • 8.3打印流-PrintStream和PrintWriter
  • 9.转换流InputStreamReader和OutputStreamWriter
  • 10.Properties类
  • 10.1 基本介绍
  • 10.2Properties常见方法


0. 老韩带你学英语

英语

含义

transformation

转型

  1. 纸上得来终觉浅,绝知此事要躬行
  2. 读书破万卷,下笔如有神
  3. 读码破万行,写码如有神
  4. 需求-》思路-》代码

1.文件

1.1 文件介绍

文件是保存数据地方,比如大家经常使用的word文档,txt文件,excel文件…都是文件,它即可以保存一张图片,也可以保持视频,声音。

1.2 文件流

文件是在程序中以流的形式来操作的

1.3 流

数据在数据源(文件)和程序(内存)之间经历的路径

1.4 输入流

数据从数据源(文件)到程序(内存)的路径

1.5 输出流

数据从程序(内存)到数据源(文件)的路径

1.6 创建文件对象相关构造器和方法

相关方法

new File(String pathname)//根据路径构建一个File对象
new File(File parent,String child)//根据父目录文件+子路径构建
new File(String parent,String child)//根据父目录+子路径构建

1.7 获取文件相关信息

  • getName
  • getAbsolutePath
  • getParent
  • length
  • exists
  • isFile
  • isDirectory

1.8 常用文件操作

目录操作和文件删除

  • mkdir创建一级目录,mkdirs创建多级目录,delete删除空目录或文件

2.IO流原理及流的分类

  1. I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输如读写文件、网络通讯等
  2. java程序中,对于数据的输入/输出操作以流"的方式进行。
  3. java.io包下提供了各种"流“类和接口,用以获取不同种类的数据,并能通过方法输入或输出数据

2.1 IO流分类

  • 按操作数据单位不同分为:字节流二进制文件,字符流(按字符)文本文件
  • 按数据流流向不同分为:输入流、输出流
  • 按流的角色不同分为:节点流、处理流、包装流

抽象基类

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

3.FileInputStream和FileOutputStream

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_文件流异步上传 java 控制流量


文件流异步上传 java 控制流量 java文件流不关闭会怎么样_开发语言_02

import org.junit.jupiter.api.Test;

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

public class _05_Output {
    public static void main(String[] args) {

    }

    @Test
    public void writeFile(){
        String filePath = "e:\\a.txt";
        FileOutputStream fileOutputStream = null;

        try {
            //1.  new FileOutputStream(filePath) 创建方式,当写入内容是,会被覆盖1原来的内容
            //2. new FileOutputStream(filePath,true)创建方式,当写入内容是,
            fileOutputStream = new FileOutputStream(filePath,true);
            String str = "hello world-----------sadfasddf";
            //fileOutputStream.write(str.getBytes());
            fileOutputStream.write(str.getBytes(),0,str.length());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}
import org.junit.jupiter.api.Test;

import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.IOException;

public class _04_FileInput {
    public static void main(String[] args) {

    }
    @Test

    public void readFile01(){
        String filePath = "e:\\hello.txt";
        int readData = 0;
        FileInputStream fileInputStream = null;
        try{
            fileInputStream = new FileInputStream(filePath);
            while((readData = fileInputStream.read()) != -1){
                System.out.println((char)readData);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @Test
    public void readFile02(){
        String filePath = "e:\\hello.txt";
        byte[] buf = new byte[8];
        int readLen = 0;
        FileInputStream fileInputStream = null;
        try{
            fileInputStream = new FileInputStream(filePath);
            while((readLen = fileInputStream.read(buf)) != -1){
                System.out.println(new String(buf,0,readLen));
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4.FileReader和FileWriter

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_开发语言_03

4.1 基本介绍

FileReader和FileWriter是字符流,即按照字符来操作io

方法

含义

new FileReader(File/String)

构造函数

read

每次读取单个字符,返回该字符,如果到文件末尾返回-1

read(char[][)

批量读取多个字符到数组,返回读取到字符数,如果到文件末尾返回-1

new String(char[])

将char[] 转换成String

new String(char[],off,len)

将char[] 的指定部分转换成String

new FileWriter(File/String)

覆盖模式,相当于流的指针在首端

new FileWriter(File/String,true)

追加模式,相当于流的指针在尾端

write(int)

写入单个字符

write(char[])

写入指定数组

write(char[],off,len)

写入指定数组的指定部分

write(string)

写入整个字符串

write(string,off,len)

写入字符串指定部分

import java.io.FileWriter;
import java.io.IOException;

public class _08_FileWriter02 {
    public static void main(String[] args) {
        String filePath = "e:\\b.txt";
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(filePath);
            for (int i = 0; i < 10; i++) {
                fileWriter.write("hello");
                fileWriter.write(11);
                fileWriter.write('A');
                char[] chars = {'a','b'};
                fileWriter.write(chars);
                fileWriter.write("韩顺平教育".toCharArray(),0,3);
                fileWriter.write("abc",0,1);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

5.节点流和处理流

5.1 基本介绍

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_java_04

  1. 节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter
  2. 处理流(也叫包装流)是"连接"在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader,BufferedWritter

5.2 节点流和处理流区别和联系

  1. 节点流是底层流/低级流,直接跟数据源相接
  2. 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供方便的方法来完成输入输出
  3. 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连

5.3 处理流的功能主要体现

  1. 性能提高:主要以增加缓冲的方式来提高输入输出的效率
  2. 操作便捷:处理流可能提供一系列便捷方法来一次输入输出大批量的数据,使用更加灵活方便

6.BufferInputStream和BufferedOutputStream

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_文件流异步上传 java 控制流量_05

7.BufferedReader和BufferedWriter

8.对象流-ObjectInputStream和ObjectOutputStream

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_序列化_06


文件流异步上传 java 控制流量 java文件流不关闭会怎么样_文件流异步上传 java 控制流量_07

  1. 序列化就是在保存数据时,保存数据的值和数据类型
  2. 反序列化就是在恢复数据时,恢复数据的值和数据类型
  3. 需要让其某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类1必须实现如下两个接口之一:Serializable 与Externalizable

8.1注意事项和细节说明

  1. 读写顺序要一致
  2. 要求实现序列化或反序列化对象,需要实现Serializable
  3. 序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性
  4. 序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员
  5. 序列化对象时,要求里面属性的类型也需要实现序列化接口
  6. 序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经1默认实现了序列化。

8.2节点流和处理流

函数

含义

类型

默认设备

System.in

标准输入

InputStream

键盘

System.out

标准输出

PrintStream

显示器

  1. InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成(转换)Reader(字符流)
  2. OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)
    3… 当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流
    可以在使用时指定编码格式(比如utf-8,gb2312,iso8859-1)

8.3打印流-PrintStream和PrintWriter

打印

9.转换流InputStreamReader和OutputStreamWriter

10.Properties类

10.1 基本介绍

  • 专门用于读写配置文件的集合类,键=值,键=值
  • 注意:键值对不要有空格,值不需要用引号一起来,默认类型是String

文件流异步上传 java 控制流量 java文件流不关闭会怎么样_序列化_08

10.2Properties常见方法

方法

含义

load

加载配置文件的键值对到Properties对象

list

将数据显示到指定设备

getProperty(key)

根据键获取值

setProperties(key,value)

设置键值对到Properties对象

store

将properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,会存储为unicode码