目录
代码示例: 文件的读写,复制,类型统计等操作.
File
java.io包
用来封装文件或目录路径的信息的对象。注意:不能操作文件中的数据。
路径:
绝对路径:就是一个完整的路径
Windows: 带有磁盘名的路径就是绝对路径
相对路径:指的是相当于某一个路径来找,
相对的路径不同,找的内容也会不同。
构造方法
方法
创建方法
删除方法
获取方法
判断方法
重命名
列出方法
可以对指定目录下的所有内容进行格式过滤:
文件名过滤器 FilenameFilter
文件名过滤器
accept(File dir, String name):
dir:指定的目录; name : 指定目录下的内容名
根据该方法的返回值是true还是false,绝对是否过滤
文件对象过滤器 FileFilter
文件对象过滤器
accept(File pathName):
pathName:指定目录下的每个内容的绝对路径值
根据该方法的返回值是true还是false,绝对是否过滤
IO技术
I:input 输入; O:output 输出; 输入输出技术。
流:stream,可以理解是为数据。
输入:站在内存的角度看,数据流入内存的。
输出:站在内存的角度看,数据从内存中流走的。
分类:
按照流的方向分为:输入流和输出流
按照操作的数据分为: 字节流和字符流
字节流: 图片、视频、音频等文件
字符流: 纯文本文件(记事本打开的)
IO流架构:
字节流
根类 抽象类
InputStream 输入流
实现类子类: FileOutputStream
OutputStream 输出流
实现类子类: FileInputStream
字节缓冲流
BufferedInputStream
BufferedOutputStream
字符流
根类 抽象类
Reader
实现类子类:FileReader
Writer
实现类子类:FileWriter
字符缓冲流
BufferedWrite
BufferedReader
转换流
InputStreamReader:转换输入流
OutputStreamWriter:转换输出流
字节流
根类:
InputStream 输入流 OutputStream 输出流
这两个对象都是抽象类,因此不能创建对象。
输出
OutputStream:
write(int by) : 写入一个字节数据
write(byte[] by) :将by中的数据全部写入
write(byte[] by, int index, int len) :将by中的一部分数据写到目的地
close():关闭输出流
flush():刷新数据到目的地
子类: FileOutputStream
构造方法:
FileOutputStream(File 文件名) 会覆盖文件
FileOutputStream(String 文件名)
FileOutputStream(File 文件名,boolean true) 不覆盖文件,追加数据
FileOutputStream(String 文件名,boolean true)
输入
InputStream:
read(): 读取一个字节数,末尾返回-1
read(byte[] by) : 将读取的内容存到by中,返回读取的字节数,末尾也是返回-1
read(byte[] by, int index, int len) :将读取的内容存到by中,末尾也是返回-1
close():关闭输入流
子类: FileInputStream
字节缓冲流
方法:
int available(): 返回未被读取的字节个数
总结步骤:
1.读
创建输入流对象,并指定数据源
采用一个字节或字节数组方式进行数据的读取,调用read()方法
关闭输入流
2.写
创建输出流对象,并指定目的地
调用write方法写字节数据
关闭输出流
缓冲字节流对象:
目的:提高读写效率。
BufferedInputStream 和 BufferedOutputStream,这对流本身不具备读写功能,所谓的调用read和write方法,实际使用的是被包装的基础流对象中的读写功能,仅仅是将读写功能加强了。
写:调用write方法时,是将数据写到内部维护的字节数组中,一次性默认能写8192个字节数据,写满后将数据刷新到目的地;如果没写满,需手动调用flush方法将数据刷新到目的地。
flush():仅仅是将数据刷新到目的地,不关闭流对象,流对象可以继续使用。
close():关闭流对象,在关闭前会刷新数据到目的地,流对象不可以继续使用。
读:调用read方法时,会使用基础流对象从数据源最多一次性读取默认8192个字节数据,并将一个字节数据返回,第二次读取时从8192个字节数组中进行读取。
字符流
根类: Reader Writer 都是抽象类。
Writer:
write(char[]) :将字符数组中的内容写到目的地
write(String str) :将字符串写到目的地
write(int ch) :将一个字符写到目的地
write(char[], index, length)
write(String, index , length)
close(): 关闭流
flush(): 刷新数据
Reader:
int read() :读取一个字符,读到末尾返回-1
int read(char[] ,index, length)
int read(char[]) : 读取内容存储到字符数组中,返回的时读取的字符个数,末尾返回-1
close(): 关闭流
字符流实际原理组成:字节流+编码表
注意:字符流只能操作纯文本文件,能使用记事本打开的都是纯文本。
子类: FileReader FileWriter
字符缓冲流
目的:也是为了提高效率。
实现原理与字节缓冲流实现原理时雷同的,比字节缓冲流多了一个查表的步骤。
BufferedWriter:
字符缓冲输出流
newLine() : 跨平台的换行符
BufferedReader:
字符缓冲输入流
String readLine(): 读取一行文本,读到末尾返回null。
注意:读取的一行文本中不包含行的终止符
转换流
好处: 可以使用指定的码表进行数据的读写操作;不指定码表默认走系统默认的码表。
名称为:
InputStreamReader:转换输入流
构造方法:
new InputStreamReader(InputStream) : 使用默认码表,将字节转为字符 - - 读
new InputStreamReader(InputStream ,String charSetname): 使用指定的编码 - - 读
注意:编码表名不区分大小写,但是不能写错。
OutputStreamWriter:转换输出流
构造方法:
new OutputStreamWriter(OutputStream):使用默认码表,将字节转为字符 - - 写
new OutputStreamWriter(OutputStream,String charsetname):使用指定码表 - - 写
注意:编码表名不区分大小写,但是不能写错。
注意:这对流都是字符流。
什么时候使用转换流:
1.当读取或写入的文件数据与系统平台默认的码表不一致时,就可以使用转换流。
2.将字节流转成字符流进行操作时(使用的默认码表)
异常处理
jdk7前版本:
jdk7后:
try(
流对象的创建
){
流对象的读写操作
}catch(异常类型声明){
异常声明
}
jdk7对异常中的catch块做了处理:
多个不同类型的异常,如果有相同的处理方式,可以使用 | 连接不同类型的异常。