1.File(D22)
windows的文件名不区分大小写
1.构造方法:
file(String pathname)
file(String parent,String child) //可以单独操作父路径和子路径,灵活性较高
file(File parent,String child) //父路径为File类型,可以调用File类的方法
2.方法:
1.创建:
boolean createNewFile() //指定文件已经存在,不再创建,只能创建文件,不能创建文件夹
boolean mkdir() //创建文件夹
boolean mkdirs() //创建多级文件夹
2.删除:
boolean delete() //删除的文件或文件夹在File的构造方法中给出
3.获取:
String getName() //获取路径的最后部分的名字 1.txt
long length() //返回路径中表示文件的字节数
String getAbsolutePath() // 获取绝对路径
File getAbsoluteFile() //推荐使用file类型,灵活
String [ ] list() //获取到路径中的文件和文件夹名(遍历一个目录)
File [ ] listFiles() //获取到路径中的文件和文件夹名(遍历一个目录)File类
4.判断
boolean exists() //判断File构造方法中的封装路径是否存在,不写绝对路径,默认路径为工程路径
boolean isDirectory() //判断路径是否为文件夹
5.文件过滤器
File listFile(FileFilter filter) //传递FileFilter接口的实现类
File file=new File("c:\\demo")
File [] fileArr=file.listFile(new myFilter()); //如果是java文件则存入数组
public class MyFilter implements FileFilter{
public boolean accept(File pathname)
return pathname.getName().endsWith(".java");
}
递归:方法中主体不变,运行时,参数发生变化的情况
注意:1.要有出口
2.次数不能过多
1.字节输出流FileOutputStream(D23)
1.从java程序中,写出文件,每次只操作一个字节,写任意文件
write();
close(); //关闭此流,并释放相关资源
2.流对象使用步骤
构造方法:绑定数据源(参数:File,String)
1.创建流子类对象,绑定目的
2.创建流对象的write写
3.close释放资源
write(100); //一次只写一个字节,100转成二进制,写入文件,文件中显示d
3.IO异常处理的细节
1.保证流对象作用域足够大
2.catch怎么处理:输出异常信息
2.字节输入流FileInputStream
构造方法:绑定数据源(参数:File,String)
1.创建字节输入流的子类对象
2.调用read()方法
3.关闭资源
FileInputStream fis=new FileInputStream("d:\\b.txt");
~int i =fis. read(); //返回读取到的字节的ascii码值,读取到结尾,返回的是-1,调用一次自动向后移动
~int read(byte[ ] b) //数组作用:缓冲,提高效率,数组中存储读到的内容的ascii码值,int:读取到了多少个有效的字节数
~getbytes(); //文字转换成数字 abc=>{97,98,99}
~new String (b) //数字转换成文字 byte[] b= {97,98,99}=>sop(new String(b))
3.字符输出流Writer
抽象类,通过子类对象FileWriter实现
构造方法:绑定数据源,参数,String,File
需要刷新flush();
write(int c)
write(char [] c)
write(char [] c,int ,int)
write(String s)
4.字符输入流Reader
抽象类,通过子类对象FileReader实现
构造方法:绑定数据源,参数,String,File
int read(); //读取一个字符
int read(char [] c) //读取字符数组
1.转换流OutputStreamWriter
继承Writer,字符输出流,用于写文本文件,字符通向字节的桥梁:字符转换成字节存储至硬盘
Q&A:FileOutputStream也能写,为什么要用OutputStreamWrite转换
FileOutputStream 是字节流,一个字节一个字节的读取
OutputStreamWrite是字符流,一个字符一个字符的读取
英文字符占一个字节,中文是一个字符占两个字节。
如果用stream,读英语可能没问题,读出来的中文可就是乱码或者一个个“????”。
如果你用Write,就不会有乱码
2.转换流InputStreamReader
字节通向字符的桥梁:将硬盘中的字节转换成字符显示出来。
3.转换流子类和父类的区别
OutputStreamWriter
子类:FileWriter
InputStreamReader
子类:FileReader
桥梁:(字节流+编码表)
子类使用默认编码表GBK,简化代码
4.字节输出流的缓冲BufferedOutputStream
构造方法:BufferedOutputStream(OutputStream out)
可以传递任意的字节输出流,提高传递者的效率
方法write(),参数:字节,字节数组
5.字节输入流的缓冲BufferedIntputStream
构造方法:BufferedIntputStream(InputStream in)
可以传递任意的字节输入流,提高传递者的效率
6.字符输出流的缓冲BufferedWriter
构造方法:BufferedWriter(Writer w)
FileWriter,OutputStreamWriter
字符串=>字符数组 "hello".toCharArray()
特有方法:void newLine() //写换行
7.字符输入流的缓冲BufferedReader
构造方法:BufferedReader(Reader r)
FileReader,OutputStreamReader
特有方法:String readLine() //读取到流的末尾,返回null,只返回行的有效字符
8.IO流对象的操作规律
把IO流进行了规律的总结(四个明确):
明确一:要操作的数据是数据源还是数据目的。
源:InputStream Reader
目的:OutputStream Writer
先根据需求明确要读,还是要写。
明确二:要操作的数据是字节还是文本呢?
源:
字节:InputStream
文本:Reader
目的:
字节:OutputStream
文本:Writer
已经明确到了具体的体系上。
明确三:明确数据所在的具体设备。
源设备:
硬盘:文件 File开头。
内存:数组,字符串。
键盘:System.in;
网络:Socket
目的设备:
硬盘:文件 File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
完全可以明确具体要使用哪个流对象。
明确四:是否需要额外功能呢?
额外功能:
转换吗?转换流。InputStreamReader OutputStreamWriter
高效吗?缓冲区对象。BufferedXXX
InputStream
FileInputStream
BufferedInputStream
OuputStream
FileOutputStream
BufferedOuputStream
Writer
OutputStreamWriter
FileWriter
BufferedWriter
Reader
InputStreamReader
FileReader
BufferedReader
字节流
字节输入流InputStream
FileInputStream 操作文件的字节输入流
BufferedInputStream高效的字节输入流
字节输出流OutputStream
FileOutputStream 操作文件的字节输出流
BufferedOutputStream 高效的字节输出流
字符流
字符输入流Reader
FileReader 操作文件的字符输入流
BufferedReader 高效的字符输入流
nputStreamReader 输入操作的转换流(把字节流封装成字符流)
字符输出流Writer
FileWriter 操作文件的字符输出流
BufferedWriter 高效的字符输出流
OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)
方法:
读数据方法:
read() 一次读一个字节或字符的方法
read(byte[] char[])一次读一个数组数据的方法
readLine() 一次读一行字符串的方法(BufferedReader类特有方法)
readObject() 从流中读取对象(ObjectInputStream特有方法)
写数据方法:
write(int) 一次写一个字节或字符到文件中
write(byte[] char[]) 一次写一个数组数据到文件中
write(String) 一次写一个字符串内容到文件中
writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)
newLine() 写一个换行符号(BufferedWriter类特有方法)
向文件中写入数据的过程
1,创建输出流对象
2,写数据到文件
3,关闭输出流
从文件中读数据的过程
创建输入流对象
从文件中读数据
关闭输入流
文件复制的过程
创建输入流(数据源)
创建输出流(目的地)
从输入流中读数据
通过输出流,把数据写入目的地
关闭流