字节流
FileInputSteam 输入流:将本地中的数据读到程序
FileOutputSteam 输出流:将程序中的数据写到本地文件
FileOutputSteam创建过程
1.创建字节输出流对象
细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在,只要确保父类在,就会新建。
细节3:如果文件存在,会清空原有的数据,替换为新的
2.写数据
细节:write方法的参数是整数,但是却转换为了对应的字符
write(int b ) 一次一个字符
write(byte[] b) 一次一个数组
write(byte[] b, int off , int len) 一次写一个部分的数组
换行写与续写
换行符:\r\n 但是\r或者\n都可以
续写:在创建对象时,append改为true
3.释放数据
每次使用 都需要释放资源
FileInputStream创建过程
1.创建对象
细节1:文件不存在直接报错
2.读取数据
细节1:一次一个字节,读出来是ASCII表的数字
细节2:文件末尾为-1
循环读取
read:读取一个数据就移动一次指针
3.释放资源
每次使用 都需要释放资源
字节流文件拷贝:
1.创建读写对象
2.拷贝
边读边写
3.释放
先创建的后释放
FileinputStream一次读多个字节
read(byte[] buffer)
大文件的拷贝
byte[] bytes = new byte[1024 * 1024 *5]; int len; while ((len = fis.read(bytes)) != -1){ fos.write(len); }
try...catch异常
Java编码中
getBytes() 使用默认方式进行编码
getBtyes(String name) 使用指定方式进行编码
字符流 = 字节流 + 字符集
输入流:一次读一个字节,遇到中文,一次读多个字节
输出流:会将数据按照指定的编码方式进行编码,变成字节再写到文字
Reader: FileReader(本地文件的输入流)
read():1.默认也是一个字节一个字节的读取,如果遇到中文就会一次读取多个
2.在读取之后,方法的底层还会进行解码并转换为十进制。
创造步骤:
第一步:创建对象
public FileReader(File file)
public FileReader(String pathname)
第二步:读取数据
public int read()
public int read(char[] buffer)
第三步:释放数据
Writer FileWriter(本地文件的输出流)
续写开关:在创建的时候,append填写true
4个缓冲流:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
缓冲流的作用
提升文件读写的效率
字节流和字符流的使用场景
字节流:拷贝任意类型的(用于拷贝)
字符流:读取纯文本中的数据、往纯文本文件中写出数据
练习1、拷贝一个文件夹,考虑子文件夹
private static void copyDir(File src, File dest) throws IOException { dest.mkdir(); //递归 //1.进入数据源 File[] files = src.listFiles(); //2.遍历数组 for (File file : files) { if (file.isFile()) { //3.判断文件,拷贝(字节流用于拷贝) FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(new File(dest,file.getName())); byte[] bytes = new byte[1024]; int len; while ((len = fis.read(bytes)) != -1) { fos.write(bytes, 0, len); } fos.close(); fis.close(); } else { //4.判断文件夹——>递归 copyDir(file,new File(dest , src.getName())); } } }
需要品味!
基本流:FileInputStream , FileOutputStream , FileReader , FileWriter
缓冲流(高级流):BufferedInputStream(字节缓冲输入流) , BufferedOutputStream(字节缓冲输出流)
将基本流包装为高级流,自带了8192的缓冲区提高性能
字节缓冲输入流:public BufferedInputStream(InputStream is)
字节缓冲输出流:public BufferedOutputStream(OutputStream os)
字符缓冲流:FileReader , FileWriter 自带了8192的缓冲区提高性能
字符缓冲输入流:public BufferedReader(Reader r)
readLine() 一次读一整行 特有方法
字符缓冲输出流:public BufferedWriter(Writer r)
newLine() 换行符 特有方法
高级流:转换输入流-是字符流和字节流之间的桥梁
InputStreamReader:
OutputStreamWriter;