1.File类
静态成员变量:
File.pathSeparator表示路径分隔符(windows ;分号 linux :冒号)
File.separator 表示文件名分隔符(windows \ 反斜杠 linux / 正斜杠)
路径:
绝对路径:一个完整的路径
相对路径:对于当前使用项目的根目录,路径可以简化书写,也就是不用写该路径的根目录
书写:注意写路径的时候\需要写两个\因为一个\表达的是转义符
构造方法:
| public File(String pathname) | 通过路径名字符串创建新的 File实例。 |
|---|---|
注意:路径可以存在,也可以不存在;可以使用绝对路径,也可以使用相对路径
| public File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
|---|---|
注意:把路径分成两个部分,使用灵活,容易更改
| public File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
|---|---|
注意:父路径是File类型,可以使用File类的方法对路径进行操作再创建对象。
常用方法:
获取功能
| public String getAbsolutePath() | 返回此File的绝对路径名字符串 |
|---|---|
| public String getPath() | 返回File的路径名字符串 (区分相对绝对) |
| public String getName() | 返回由此File表示的文件或目录的名称 (构造方法传递路径的结尾部分) |
| public long length() | 返回由此File表示的文件的大小(字节为单位)(文件夹返回0) |
判断功能:
| public boolean exists() | 此File表示的文件或目录是否实际存在。 |
|---|---|
| public boolean isDirectory() | 此File表示的是否为目录。 |
| public boolean isFile() | 此File表示的是否为文件。 |
创建删除功能:
| public boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 |
|---|---|
| public boolean delete() | 删除由此File表示的文件或目录。 |
| public boolean mkdir() | 创建由此File表示的目录。 |
| public boolean mkdirs() | 创建由此File表示的目录,包括任何必需但不存在的父目录。 |
遍历功能:路径必须是文件夹,否则会返回空指针异常
| public String[] list() | 返回一个String数组,表示该File目录中的所有子文件或目录。 |
|---|---|
| public File[] listFiles() | 返回一个File数组,表示该File目录中的所有的子文件或目录。 |
递归实现打印多级目录:
public static void scan(Filefile){File[] files = file.listFiles();for(Filef:files){if(f.isDirectory())scan(f);elseSystem.out.println(f.toString());}}
文件过滤器:FileFilter
通过重写File Filter中的方法可以在使用listFiles方法的时候进行过滤
2.IO流:
| 输入流 | 输出流 | |
|---|---|---|
| 字节流 | 字节输入流 InputStream | 字节输出流 OutputStream |
| 字符流 | 字符输入流 Reader | 字符输出流 Writer |
字节输出流【OutputStream】
| public void close() | 关闭此输出流并释放与此流相关联的任何系统资源。 |
|---|---|
| public void flush() | 刷新此输出流并强制任何缓冲的输出字节被写出。 |
| public void write(byte[] b) | 每次可以写出数组中的数据 |
| public void write(byte[] b, int off, int len) | 每次写出从off索引开始,len个字节 |
| public abstract void write(int b) | 每次可以写出一个字节数据 |
FileOutputStream类:
成员方法:
public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件public FileOutputStream(String name):创建文件输出流以指定的名称写入文件public FileOutputStream(File file, boolean append):创建文件输出流以写入由指定的 File对象表示的文件,append为true,则表示追加数据public FileOutputStream(String name, boolean append):创建文件输出流以指定的名称写入文件,append为true,则表示追加数据
写入数据:
注:可以通过String类的getBytes()方法来快速写入字符串
字节输入流【InputStream】
| public void close() | 关闭此输入流并释放与此流相关联的任何系统资源 |
|---|---|
| public abstract int read() | 从输入流读取数据的下一个字节 |
| public int read(byte[] b) | 从输入流中读取一些字节数,并将它们存储到字节数组 b中 |
FileInputStream类:
FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。- 当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出
FileNotFoundException
- 当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出
方法:read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1
注意:两种方式的读取都是读取完固定位数之后将光标后移,在读取到-1的时候停下
字符输入流【Reader】
| public void close() | 关闭此流并释放与此流相关联的任何系统资源 |
|---|---|
| public int read() | 从输入流读取一个字符 |
| public int read(char[] cbuf) | 从输入流中读取一些字符,并将它们存储到字符数组cbuf中 |
FileReader类
构造方法类似字节输出流
成员方法:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1read(char[] cbuf),每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回-1
字符输出流【Writer】
| void write(int c) | 写入单个字符。 |
|---|---|
| void write(char[] cbuf) | 写入字符数组。 |
| abstract void write(char[] cbuf, int off, int len) | 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。 |
| void write(String str) | 写入字符串。 |
| void write(String str, int off, int len) | 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。 |
| void flush() | 刷新该流的缓冲。 |
| void close() | 关闭此流,但要先刷新它。 |
FileWriter类
构造方法类似字节输入流
成员方法:write(int b) 方法,每次可以写出一个字符数据write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据write(String str) 和 write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便
注意:写入数据的时候,write方法是先写入到内存缓冲区,将字符转换为字节,然后需要通过使用flush方法把内存缓冲区中的数据刷新到文件中
3.属性集
Properties类
构造方法:public Properties() :创建一个空的属性列表
成员方法
public Object setProperty(String key, String value): 保存一对属性。public String getProperty(String key):使用此属性列表中指定的键搜索属性值。public Set<String> stringPropertyNames():所有键的名称的集合。public void load(InputStream inStream): 从字节输入流中读取键值对,加载文本中的数据。
4.缓冲流
字节缓冲流
构造方法
public BufferedInputStream(InputStream in):创建一个 新的缓冲输入流。public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。
字符缓冲流
构造方法
public BufferedReader(Reader in):创建一个 新的缓冲输入流。public BufferedWriter(Writer out): 创建一个新的缓冲输出流。
特有方法:
- BufferedReader:
public String readLine(): 读一行文字。 - BufferedWriter:
public void newLine(): 写一行行分隔符,由系统属性定义符号。
5.转换流
InputStreamReader类
构造方法:
InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。
OutputStreamWriter类
构造方法:
OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。
6.序列化
ObjectOutputStream类
构造方法:public ObjectOutputStream(OutputStream out): 创建一个指定OutputStream的ObjectOutputStream
序列化满足条件:
- 该类必须实现
java.io.Serializable接口,Serializable是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException。 - 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用
transient关键字修饰。
成员方法:public final void writeObject (Object obj) : 将指定的对象写出。
ObjectInputSteam类:ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
构造方法:public ObjectInputStream(InputStream in): 创建一个指定InputStream的ObjectInputStream。
反序列化操作:public final Object readObject () : 读取一个对象。Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
7.打印流
PrintStream类
构造方法:public PrintStream(String fileName): 使用指定的文件名创建一个新的打印流。
