--------------------------------------------
File:文件类
1.构造方法
1) 参数传入文件路径
new File("")
2) 参数传入父路径 和 子路径
new File("a","a.txt")
这是对象,和本地磁盘中的文件没有关系,不会自动在本地磁盘创建。
2.绝对路径 和 相对路径
1).绝对路径:从磁盘出发(Linux下是/根目录)
2).相对路径:从某个位置出发,参照路径是某个位置
3.通过相对路径获取绝对路径
1.)getResource()
xx.getclass().getResource("相对路径").getPath()
2.)getClassLorder()
xx.getclass().getClassLorder().getResource("相对路径").getPath()
两者的参考值(参考路径)不相同
4.常用API:
File getAbsoluteFile() - 获取绝对路径
boolean exists() - 判断该文件是否存在
boolean isDirectory() - 判断是否是目录
boolean isFile() - 判断是否是文件
boolean createNewFile() - 创建文件(有就不创建,没有就创建)
boolean mkdir() - 创建单级目录
boolean mkdirs() -创建多级目录
String getName() - 获取文件的名字
String getPath() - 获取文件路径名(创建时的路径)
boolean renameTo(File dest) - 文件的移动或重命名或者移动+重命名(如果有重名或者文件不存在则移动失败)
String[] list() -列出file所有文件的名字(如果此抽象路径名不表示一个目录,那么此方法将返回 null)
File[] listFiles() -列出file所有文件的对象(如果此抽象路径名不表示一个目录,那么此方法将返回 null)
boolean delete()
File[] listFiles(FileFilter filter)
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的路径名必须满足过滤器外,此方法的行为与 listFiles() 方法相同。如果给定 filter 为 null,则接受所有路径名
-------------------------------------------------------
IO流(虚拟机和本地的交互)
{
1.字节流和字符流
2.底层流和高级流(缓冲流)
3.输入流和输出流
}
Input(输入流,读文件)
数据从本地到内存
Output(输出流,写文件)
数据从内存到本地
1.字节流(InputStream(C) OutputStream(C))
子类 FileInputStream(C)
(1).构造方法:
new FileInputStream(File file)
new FileInputStream("相对路径")
(2)常用API:
int read() -> 读一个字节
注意:
a.读一个字节(低8位,其他24位全补0,返回值范围0~255)
b.读到末尾返回-1
int read(byte[] bs) -> 读字节数组 (字节值的范围-128~127)
数据存到字节数组中,返回值是读取的个数(不超过字节数组的长度)
FileOutputStream(C)
(1).构造方法:
new FileOutputStream(File file)
new FileOutputStream(File file,true)
new FileOutputStream("相对路径")
new FileOutputStream("相对路径",true)
->true 在原文件上进行追加内容
(2).常用API:
void write(int i) -> 写入一个字节(取低8位)
void write(byte[] bs) -> 写一个字节数组
void write(byte[], int off, int len) -> 写入一个字节数组,从字节数组的第几位下标开始,写入长度为多少
2.缓冲字节流(高效率)
子类 BufferedInputStream
new BufferedInputStream(底层流)
BufferedOutputStream
new :BufferedOutputStream(底层流)
void flush() - 手动刷新缓冲区
3.字符流(基础存储单位是char类型,每次两个字节)(Reader Writer)
子类/实现类:
1)字符输入流:InputStreamReader()
(1)创建:
a.InputStreamReader(底层流) - 默认字符集
底层流:可以决定文件是否进行追加
b.InputStreamReader(底层流,字符集) - 指定字符集
字符集:
UFT-8 1字符 = 3字节
GBK 1字符 = 2字节
(2)常用API
int read() - 读取单个字符。
注意: 读到末尾返回-1
返回值范围0~65535
2)字符输出流:OutputStreamWriter
(1)创建:
OutputStreamWriter(底层流) - 默认字符集
OutputStreamWriter(底层流,字符集) - 指定字符集
(2)常用API:
void flush() 刷新该流的缓冲。
void write(char[] cbuf, int off, int len) - 写入字符数组的某一部分。
void write(int c) -写入单个字符。
void write(String str, int off, int len) - 写入字符串的某一部分。
PS: 因为从off开始,len不能超过总长度-off,否则会越界报错
4.缓冲字符流
1.缓冲字符输入流:BufferedReader
1)创建:
BufferedReader(底层字符流)
2)常用API:
String readLine() - 读一整行
主要:注意返回null,标记读到末尾
2.缓冲字符输出流:PrintWriter
1)创建:
PrintWriter(Writer, boolean autoFlush)
作用:
a.Writer需要使用底层字符流进行构建
底层字符流可以指定字符集
b.底层字符流使用底层字节流进行构建
底层字节流可以指定是否进行追加
c.是否进行自动刷新缓冲区
2)常用API:
void print() - 写出内容,打印不换行
注意: 使用print()结束,必须手动调用刷新缓冲区
pw.flush()
void println() - 写出内容,打印并且换行
注意: 要设置了自动刷新缓冲区,只要遇到println()才会进行自动刷新
底层流和缓冲流的区别
1.有无缓冲区
2.效率
3.方法