# I/0 流
# 文件对象
- 文件夹和文件都用 File 表示
//实例化的方法有多种 ,这里用作者最常用的方法 ^_^
File f = new File("文件路径");
- 文件常用方法
f.exists() //文件是否存在
f.isDirectory() //是否是文件夹
f.isFile() //是否是文件
f.length() //文件长度
String sFile = f.getParent(); // 以字符串形式返回获取所在文件夹
File pFile = f.getParentFile(); // 以文件形式返回获取所在文件夹
f.mkdir(); // 创建文件夹,如果父文件夹skin不存在,创建就无效
f.mkdirs(); // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹
f.createNewFile(); // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
f.getParentFile().mkdirs(); // 所以创建一个空文件之前,通常都会创建父目录
f.listRoots(); // 列出所有的盘符c: d: e: 等等
f.delete(); // 刪除文件
f.deleteOnExit(); // JVM结束的时候,刪除文件,常用于临时文件的删除
String[] strFile = f.list(); // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
File[]fs= f.listFiles(); // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
# 字节流
TIP
注意: 因为大部分 I/O 流的读写方法基本一致, 所以这里只在字节流说明其余的流不再说明 ^_^
# 字节输入流
构造方法
FileInputStream(File file) //通过File对象来创建一个字节输入流
FileInputStream(String name) //通过文件路径名创建一个字节输入流
读方法
int read() // 一次读取一个字节,返回 0 -255 范围内的 int 数,如果到达流末尾,则返回值 -1。
int read(byte[] b) //从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中,以整数形式返回实际读取的字节数,如果到达流末尾,则返回值 -1。
# 字节输出流
构造方法
FileOutputStream(File file) //通过File对象来创建一个字节输出流
FileInputStream(String name) //通过文件路径名创建一个字节输出流
写方法
public void write(int b) //写一个字节, 写的ASCII字符
void write(byte[] b) //将 b.length 个字节从指定 byte 数组写入此文件输出流中。
# 字符流
- 字符输入流
FileReader(File file) //通过File对象来创建一个字符输入流
FileReader(String name) //通过文件路径来创建一个字符输入流
- 字符输出流
FileWriter(File file) //通过File对象来创建一个字符输出流
FileWriter(String name) //通过文件路径来创建一个字符输出流
# 其他流
# 缓存流
//带缓冲的字节输入/输出流
BufferedInputStream
BufferedOutputStream
//带缓冲的字符输入/输出流
BufferedWriter
BufferedReader
提示
# 数据流
//数据输入/输出流
DataInputStream
DataOutputStream
WARNING
数据流必须成对使用, 比如你是用 DataOutputStream 写入数据就必须用 DataInputStream 读取数据, 否则会出现EOFException 这相对当于是一种规则
# 对象流(序列化)
ObjectInputStream
ObjectOutputStream
提示
对于序列化的讲解 慕课网有相关的视频(进入见第六章) 点这里进入 (opens new window)
# 读写文件的用法
- 读取
File file = new File("要读取的文本路径");
try( BufferedReader bReader = new BufferedReader(new FileReader(file))) {
System.out.println(bReader.readLine());
} catch (IOException e) {}
- 写入
File file = new File("要写入的文本路径");
try {
file.createNewFile();
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
bWriter.write("要写入的文本");
bWriter.flush();
bWriter.close();
} catch (IOException e) {}
提示
读取的 try-catch 方式是 JDK7 开始支持的写法 这种写法称为 try-with-resources
所有的流,都实现了一个接口叫做 AutoCloseable,任何类实现了这个接口,都可以在 try()中进行实例化。 并且在 try, catch, finally 结束的时候自动关闭,回收相关资源
提示
连接数据库的时候也可以这么写,避免使用完数据库忘记关闭连接,浪费资源
JDBC →