-
File f = new File(path)
-
File.separator
分隔符 -
按流向分:输入流、输出流
-
按处理类型分:字节流
InputStream
、OutputStream
,字符流Reader
、Writer
(这四个类是抽象基类) -
节点流、处理流(包的一层)
-
流的体系结构
抽象基类 节点流(文件流) 缓冲流(处理流的一种)提高速度 InputStream
FileInputStream
BufferedInputStream
OutputStream
FileInputStream
BufferedOutputStream
Reader
FileReader
BufferedReader
(多了一个readLine
读取一行,不包括换行符)Writer
FileWriter
BufferedWriter
-
read
、write
、byte
、char
-
main
下的相对路径相对于当前工程下的单元测试下的相对路径相对于当前模块下
-
public static void main(String[] args) { FileReader fr = null; try { File file = new File("hello.txt"); fr = new FileReader(file); int t; while ((t = fr.read()) != -1) { System.out.println((char)t); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fr != null) fr.close(); } catch (IOException e) { e.printStackTrace(); } } }
-
UTF-8
-
0XXXXXXX
-
110XXXXX
10XXXXXX
-
1110XXXX
10XXXXXX
10XXXXXX
-
-
FileWriter(file, false)
:默认为false
,代表覆盖原文件,为true
则为追加,不能用字符流处理图片这种字节数据 -
BufferedInputStream(节点流)
:关闭先关外再关里,内层可省略,因为自动关闭 -
转换流:处理流的一种
InputStreamReader
:字节输入转换为字符输入流OutputStreamWriter
:字符的输出流转换为字节的输出流- 相当于解码、编码
-
打印流:
PrintStream
、PrintWriter
,提供了各种重载的print
方法,Sout
就是一个打印流PrintStream
,会自动flush
,不会抛出IOException
-
数据流:
DataInputStream
、DateOutputStream
,操作基本数据类型和String
-
对象流:
ObjectInputStream
、ObjectOutputStream
,不能序列化static
和transient
修饰的成员变量对象序列化要求:实现
Serializable
接口与public static final long serialVersionUID
,后者可以自动生成,但是容易出现错误 -
随机存取文件流:
RandomAccessFile
既可以作为输入流又可以作为输出流,直接继承Object
,会对已有文件从头覆盖,如果输出的不够长,会对已有内容覆盖一部分,seek
方法可以调整角标 -
NIO
、Files
、Path
、Paths