文章目录

  • 1、什么是IO流
  • 2、IO流的分类
  • 3、IO流的使用
  • 4、File
  • 5、IO流与Properties对象


1、什么是IO流

通过IO可以完成对硬盘的读写。


2、IO流的分类

字节流:以字节的方式读取数据,一次读取8bit,什么文件都能读取。

字符流:只能读取纯文本文件。

IO流的四大家族:都是抽象类,都实现了Closeable接口

java.io.inputStream

java.io.OutputStream

java.io.Reader

java.io.Writer

以Stream结尾的都是字节流,以er结尾的都是字符流。

所有的输出流都实现了Flushable接口,都有flush()方法。

java.io包下需要掌握的流有16个

文件专属:

FileInputSream

FileOutputSream

FileReader

FileWriter

转换流:将字节流转化为字符流

InputStreamReader

OutputStreamWriter

缓冲流:

BufferedReader

BufferedWriter

BufferedInputStream

BufferedOutputStream

数据流:

DataInputStream

DataOutputStream

标准输出流:

PrintWriter

PrintStream System.out返回的是PrintStream,System.setOut(PrintStream)设置输出位置,不向控制台输出

对象专属流:

ObjectInputStream 反序列化。序列化与反序列化的对象必须实现Serializable接口。

ObjectOutputStream 序列化。transient修饰的属性不会被序列化

3、IO流的使用

FileInputStream

new FileInputStream(String path)

new FileInputStream(File file)

read() 一次读取一个字节,返回读到字节,如果没有可读数据返回-1

read(byte[] b) 一次最多读取b.length个字节,返回读到字节的数量,没有读到字节返回-1

available()返回流中剩余没有读到的字节数量

skip(long n):跳过n个字节不读

FileOutputStream

write()会将源文件清空,然后重新写入,在new FileOutputStream()的构造方法中加入true表示追加

FileReader

read(char[] c) 返回读取到的字符数,没有读到返回-1

FileWriter

writer(char[] c)

writer(String s)

BufferedReader 不需要使用char数组,自带缓冲

new BufferedReader(Reader r)

构造方法里传入的流叫节点流,外部构造出来的流叫包装流,节点流不需要关闭,会自动会关闭。

readLine() 读一行,读到最后返回null

4、File

java.io.File包

makedir() 创建目录

makedirs() 创建目录,包括不存在的父目录

listFiles() 列出目录中的文件/目录

length()返回文件/目录的大小

isFile() 是否是文件

idDirectory 是否是目录

isAbsolute() 是否是绝对路径名

getPath() 返回此文件的String路径名

getParent() 返回String类型的上一级目录

getParentFile()返回File类型的上一级目录

5、IO流与Properties对象

file01文件

# 注释用井号
username=root
password=123
# 也可以用:
port:3306

Test.java

import java.io.FileInputStream;
import java.util.Properties;

class Test {
    public static void main(String[] args) throws Exception{
        FileInputStream fis = new FileInputStream("file01");
        Properties properties = new Properties();
        properties.load(fis);
        System.out.println(properties.getProperty("username"));
        System.out.println(properties.getProperty("password"));
        System.out.println(properties.getProperty("port"));
        fis.close();
    }
}

好的理念:

经常改変的数据,可以单独写到一个文件中,使用程序动态读取。
将来只需要修改这个文件的内容,java代码不需要改动,不需要重新编译,服务器也不需要重启。就可以拿到动态的信息。类似于以上机制的这种文件被称为配置文件。并且当配置文件中的内容格式是:
keyl=value1
key2=value2
的时候,我们把这种配置文件叫做属件配置文件。
java规范中有要求:属配置文件建议以. properties结尾,但这不是心须的。
这种以.properties结居的文件在java中被称为:属性配置文件。
其中Properties对象是专门存放属性配置文件内容的一个类。