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对象是专门存放属性配置文件内容的一个类。