java_IO流

文件:

什么是文件:文件是保存数据的地方,比如各种文档,文件既可以保存图片也可以保存视频声音

文件流:

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

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

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

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

常用的文件操作:

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

相关方法:

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

creatNewFile创建新文件

获取文件相关信息:

1.getName()//获取文件名字
2.getAbsoluteFile()//获取文件绝对路径
3.getParent()//获取文件父级目录
4.length()//获取文件大小(字节)
5.exits()//返回布尔值  判断文件是否存在 
6.isFile()//返回布尔值  判断是不是一个文件
7.isDirectory()//返回布尔值,判断是不是一个目录

目录的操作和文件删除:

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

IO流原理及流的分类

IO流原理:

1.IO是Input/Outputd的缩写,IO技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等

2.Java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行

3.java.io包下提供了各种"流"类和接口,用以获取不同种类的数据,并通过方法输入或输出数据

4.input:读取外部数据(如磁盘、光盘等存储设备的数据)到程序(内存)中

5.输出Output:将程序(内存)数据输出到磁盘、光盘等存储设备中

流的分类:

1.按照操作数据单位不同分为:字节流(8bit):InputStream/OutputStream,字符流(按字符):Reader/Writer

2.按照数据流的方向不同分为:输入流,输出流

3.按照角色不同分为:节点流,处理流/包装流

IO流体系图-常用的类:

1.InputeStream:字节输入流

InputeStream抽象类是所有类字节输入流的超类

InputeStream常用的子类:

(1).FileInputStream:文件输入流

(2).BufferdInputStream:缓冲字节输入流

(3).ObjectInputStream:对象字节输入流        

2.OutputStream

OutputStream常用的类:

(1)FileOutputStream

package com.hxh.OutputStream;
import org.junit.jupiter.api.Test;
import java.io.FileOutputStream;
import java.io.IOException;

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

    }
@Test
    public  void OutStream(){

        String filepath = "f:\\a.txt";
        FileOutputStream fileOutputStream = null;

    try {
        fileOutputStream = new FileOutputStream(filepath);//这种创建方式会覆盖源文件
           //fileOutputStream = new FileOutputStream(filepath,true)这样创建会续写
        String str = "hello,World";
        fileOutputStream.write('a');

        //这个getBytes()方法可以把字符串变成字节数组
        fileOutputStream.write(str.getBytes(),0,str.length());

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


}
}

3.FileReader和FileWriter:

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

FileReader相关方法:

(1)new FileReader(File/String)

(2)read:每次读取单个字符,返回该字符,如果读到末尾返回-1

(3)read(char[]):批量读取到字符到数组,返回读取到的字符数,如果到文件末尾返回-1

相关API

(1)new String(char[]):将char[]转换成String

(2)new String(char[],off,len):将char[]的指定部分转换成String

FileWriter相关方法:

(1)new FileWriter(File/String):覆盖模式,相当于流的指针在首端

(2)new FileWrite(File/String,true):追加模式,相当于流的指针在尾端

(3)write(int):写入单个字符

(4)write(char[]):写入指定数组

(5)write(char[],off,len):写入指定数组的指定部分

(6)write(string):写入整个字符串

(7)write(string,off,len):写入字符串的指定部分

相关API:String类:toCharArray:将String转换成char[]

注意:FileWriter使用后,必须要关闭(close)或者刷新(flush),否则写入不到指定的文件

节点流和处理流:

介绍:

1.节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter

2.处理流(也叫包装流)是“连接”在已存在的流(节点流或者处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter

节点流和处理流的区别和联系:

1.节点流是底层流/低级流,直接跟数据源相接

2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出

3.处理流(也叫包装流)对节点流进行包装,是用了修饰器设计模式,不会直接与数据源相连

处理流的功能主要体现在以下两个方面:

1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率

2.操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便

处理流-BufferedReader和BufferedWriter

1.BufferedReader和BufferedWriter属于字符流,是按照字符来读取数据的

2.关闭时,只需要关闭外层流即可

对象流-ObjectInputStream和ObjectOutputStream

序列化和反序列化:

1.序列化就是在保存数据时,保存数据的值和数据类型

2.反序列化就是在回复数据时,恢复数据的值和数据类型 

3.需要让某一个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:

Serializable     //这是一个标记接口  

Externalizable  //该接口有方法需要实现,因此一般实现Serializable接口

基本介绍:

1.功能:提供了对基本类型或对象类型的序列化和反序列化的方法

2.ObjectOutputStream提供了序列化功能

3.ObjectInputStream提供反序列化功能

序列化:

package com.hxh;

import java.io.*;

public class ObjectOutputStream_ {
    public static void main(String[] args) throws IOException {
        String filepath = "f:\\data.dat";
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filepath));
        oos.write(100);
        oos.writeBoolean(true);
        oos.writeChar('H');
        oos.writeDouble(1.0);
        oos.writeUTF("黄孝辉");
        oos.writeObject(new Dog("小黑",6));
        oos.close();
        System.out.println("数据保存完毕(序列化形式)");
    }
}
class Dog implements Serializable {
    private String name ;
    private int age;
    public  Dog(String name,int age){
        this.name = name;
        this.age= age;
    }

}

反序列化:

注意事项:

1.读写顺序要一致

2.要求实现序列化或反序列化对象,需要实现Serialzable

3.序列化的类中建议添加SrtialVersionUID(序列版本号),为了提高版本的兼容性

4.序列化对象时,默认将里面所有属性都进行序列化,但除了static或者transient修饰的成员

5.序列化对象时,要求里面属性的类型也需要实现序列化接口

6.序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

标准输入输出流:

                                             类型                              默认设备

System.in标准输入               InputStream                  键盘

System.out 标准输出            PrintStream                   显示器

转换流:InputStreamReader和OutputStreamWriter

介绍:

1.InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)

2.OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)

3.当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流

4.可以在使用时指定编码格式(比如utf-8,gbk,gb2312,ISO8859-1等)

打印流-PrintStream和PrintWriter

打印流只有输出流,没有输入流

Properties类

1.专门用于读写配置文件的集合类

配置文件的格式:

键 = 值

2.注意:键值对不需要有空壳,值不需要用引号。默认类型是String

3.Properties的常见方法

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

list:将数据显示到指定设备

getProperty(key):根据键获取值

setProperty(key,value):设置键值对到Properties对象

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值