1.用来表示文件或目录(文件夹)的路径的抽象表示形式。
2.File对象可以用来封装一个文件或目录的信息
3.注意
b.File对象不能操作文件中的数据,仅仅是封装文件相关信息,如:大小,文件名..
路径
绝对路径
相对路径
File(String pathname)
File(File parent, String child)
File(String parent,String child)
创建和删除
创建文件
创建目录
boolean mkdir()
boolean mkdirs()
获取
getAbsoluteFile()
getAbsolutePath()
getName()
getParent()
getParentFile()
getPath()
length()
返回文件大小
注:
lastModified()
判断
exists()
isAbsolute()
isFile()
isDirectory()
isHidden()
列出
list()
listFiles()
listRoots()
过滤
FilenameFilter
文件名过滤器
boolean accept(File dir,String name)
FileFilter
文件对象过滤器
boolean accept(File pathname)
其他
rename(File)
I:inout,
O:output
出入输出
输入
输出
IO技术
流
根据流的方向分类
根据操作的数据类型分类
难点
1、选择字符还是字节流?
字符:纯文本文件(txt)
实在不清楚该选择哪个流,就用字节流,它是万能的。
2、选择输入还是输出
程序执行时产生一些数据,这些数据要保存 ----输出 write
读入写出。
总结
字节流
根类
输入流:InputStream
输出流:OutputStream
特点:抽象类
OutoutStream
方法
write(int by)
write(byte[] by)
write(byte[] by,int index,int length)
close()
flush()
子类
FileOutputStream
用于操作文件,向文件中写入数据
构造方法
FileOutputStream(String/File filename)
FileOutputStream(String/File filename,true)
InputStream
方法
int read()
int read(byte[] by)
int read(byte[] by,index,lengh)
close()
int available()
子类
FileInputStream
用于读取文件中的数据
构造方法
字节缓冲流
BufferedInputStream和BufferedOutputStream出现的目的就是为了提高读和写的效率。
此流是字节流,并且是InputStream和OutputStream的子类。
此流不能与数据源和目的地直接建立连接,仅仅是将基础流对象进行包装,增强读写功能。
缓冲流是从缓冲区中进行数据的读和写,缓冲区中的内容是通过基础流操作得来的。
close和flush区别
close
flush
异常处理
编码表(字符集)
解码
编码
乱码
字符流操作字符类型的数据
实际原理
字符流
根类
Writer
抽象类
Writer
write(int ch)
write(char[] ch)
write(char[] ch,index,length)
write(String str)
write(String str,index,length)
flush()
close()
子类
FileWriter
构造方法
FileWriter(String/File filename)
FileWriter(String/file filename, boolean append)
Reader
抽象类
Reader
int read()
int read(char[])
int read(char[],index,lengh)
close()
子类
FileReader
FileReader(File/String name)
注
字符缓冲区对象
BufferedWriter
将文本写入输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
可以指定缓冲区的大小,或者接受默认的大小,大多数情况下,默认值足够用。
新增方法
void newLine()
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
可以指定缓冲区的大小,或者可使用默认的大小,大多数情况,默认值就足够大
新增方法
String readLine()
InputStreamReader和OutputStreamWriter是一对字符流
构造方法
作用
ObjectInputStream和ObjectOutputStream字节流
ObjectOutputStream
字节输出流,除了能写字节数组、字节数据外,新增了很多功能,可以向目的地中写基本类型和Object类型数据,方法名格式:write+类型名。
构造方法
ObjectOutputStream(OutputStream)
ObjectInputStream
字节输入流,除了能读字节数组、字节数据外,新增了很多功能,可以读取数据源中写基本类型和Object类型数据,方法名格式:read+类型名
构造方法
ObjectInputStream(InputStream)
这对流可以去读取基本类型数据和引用类型数据,一定要注意写入数据的顺序决定了读取的顺序,按照字节的顺序依次进行写。writeInt(1),写入4个字节,并占用四个字节的空间。
序列化与非序列化
序列化
反序列化
自定义对象进行序列化与反序列,需实现一个接口,即java.io.Serializable
注意
问题
属性不想要序列化,使用static修饰即可,但这种方式不建议;
建议专业关键字
定义类的版本号
输入
System.in
类型是InputStream
数据源:键盘
更改数据源
setIn(InoutStream in)
Scanner
是一个扫描器,只能扫描基本类型(char 除外)和字符串类型数据
构造方法
Scanner(File)
Scanner(InputStream)
方法
next()
nextLine()
输出
System.out/err
数据类型
目的地
更改目的地
setOut(PrintStream out)
PrintStream
打印字节流
构造方法
PrintStream(File file)
PrintStream(File file,String csn)
PrintStream(OutputStream out)
PrintStream(OutputStream out, boolean autoFlush)
PrintStream(OutputStream out, boolean autoFlush, String encoding)
PrintStream(String fileName)
PrintStream(String fileName, String csn)
该类中封装了大量重载的print和println方法,可以将不同类型的数据写到指定的目的地,print不写入换行,println会写入换行。当写字符数组时会看到字符数组元素内容,是因为有print(char[])方法,当写其他类型元素的数组时,调用的是print(Object)方法。
PrintWriter
打印字符流
该类与PrintStream用法基本一样,注意该类是一个字符流,不要忘记刷新
开启自动刷新后,只针对println、printf、format这三个方法有效,其他无效。
构造方法
PrintWriter(File file)
使用指定文件创建不具有自动行刷新的新 PrintWriter。
PrintWriter(File file, String csn)
创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。
PrintWriter(OutputStream out)
根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
PrintWriter(OutputStream out, boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter。
PrintWriter(String fileName)
创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
PrintWriter(String fileName, String csn)
创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。
PrintWriter(Writer out)
创建不带自动行刷新的新 PrintWriter。
PrintWriter(Writer out, boolean autoFlush)
创建新 PrintWriter。