第十六节——File类,字节流

File类学习

一、File类的概述

  1. File是文件和目录路径名的抽象表时
  2. 对于File而言,它封装的并不是一个真正的存在的文件,仅仅是一个路径,它可以是存在的,也可以是不存在的,通过操作这个路径变成具体存在

二、构造方法

  1. File(String pathname):通过给定路径名字符串来创建File实例
File f1 = new File("C:\\tool\\1.txt");
  1. File(String parent,String child):从父路径名字符串和子路径名字符串创建File实例
File f2 = new File("C:\\tool","1.txt");
  1. File(File parent,String child):从父实例存储的路径和子路径名创建File实例
File f3 = new File("C:\\tool");
 File f4 = new File(f3,"1.txt");

I/O流概述

在这里插入图片描述

字节流

一、使用情况

如图片,视频等非纯文本,使用字节流打开,不确定就选字节流

二、字节流写数据

  1. OutputStream是抽象类,是所有字节输出流的超类
  2. FileOutputStream:文件输出流,用于将数据写入文件里

三、FileOutputStream的使用方法

  1. FileOutputStream(String name):创建文件输出流以指定的名称写入文件,指定的文件名称不存在则会创建,父目录不存在则报错。
  2. FileOutputStream(String name,Boolean append):boolean默认为false,主动修改为true则变为在上一次文件末尾追加写入
  3. FileOutputStream(File file):通过File类的对象,创造对应文件的文件输出流
  4. FileOutputStream(File file,boolean append):boolean默认为false,主动修改为true则变为在上一次文件末尾追加写入
  5. void write (int b):将指定的字节写入文件输出流,写入的是ASCII值,文件里呈现具体对应的字符,此方法一次只能写一字节数据
  6. void write (byte[] b):将b字节数组的内容写入文件输出流里面
  7. void write (byte[] b,int off,int len):将b数字中的数据,从off开始写,写入长度为len的数据
  8. void close():关闭文件输出流并释放相关资源,没有执行close,write多次使用,默认在上一次write方法后面追加写入

四、FileOutputStream举例

  1. 例子1:使用void write (int b)写入一个ASCII值
FileOutputStream f = new FileOutputStream("C:\\java\\mynote\\1.txt");
f.write(97);
f.write(98);
f.close();

在这里插入图片描述

  1. 例子2:使用void write (byte[] b)写入一个数组
FileOutputStream f = new FileOutputStream("C:\\java\\mynote\\1.txt");
byte[] b = {97,98,99};
f.write(b);
f.close();

在这里插入图片描述

  1. 例子3实现换行和追加
FileOutputStream f = new FileOutputStream("C:\\java\\mynote\\1.txt",true);
byte[] b = {97,98,99,100};
for(byte i:b){
  f.write(i);
  f.write("\n".getBytes(StandardCharsets.UTF_8)); //插入换行\n的字符形式,且设定字符为UTF-8
}
f.close();

五、字节流读数据

  1. InputStream是抽象类,是所有字节输入流的超类
  2. FileInputStream:从文件中读取字节

六、FileInputStream使用方法

FileInputStream(String name):创建文件输入流以指定的名称写入文件,指定的文件不存在则报错。
3. FileOutputStream(File file):通过File类的对象,创造对应文件的文件输入流
4. int read ():读取一个字节数据,返回的是ASCII值,多次使用此方法,读取超过了内容长度,则返回-1值
5. int read (byte[] b):读取一个字节数组的数据,返回的是存入b数组的个数,b数组中存储的是Ascii值,多次使用此方法,读取超过了内容长度,则返回-1值
6. int read (byte[] b,int off,int len):读取长度为len的数据,放入b数组中,放入的起始索引为off,b中存放的是ASCII值,多次使用此方法,读取超过了内容长度,则返回-1值
7. void close():关闭文件输出流并释放相关资源,没有执行close方法,多次使用read方法使用默认是上一次read的后面追加读取

七、输入输出流配合复制图片

FileInputStream f1 = new FileInputStream("C:\\java\\mynote\\1.PNG");
FileOutputStream f2 = new FileOutputStream("C:\\java\\mynote\\2.PNG");
byte[] b = new byte[1024];
int flag = f1.read(b);
while (flag!=-1){
  f2.write(b);
  flag=f1.read(b);
}
f1.close();
f2.close();

字节缓冲流

一、概述

  1. 输出流是将内存中的数据放进硬盘,而输入流是将硬盘中的数据读取到内存,FileInputStream与FileOutputStream每次都是操作一个字符进行内存到硬盘的转换,由于内存是高速设备,硬盘是低速设备,每次转换提交IO请求次数多,运行效率低,所以需要设置缓冲区
  2. 字节缓冲流,创建时默认开辟出一块缓冲区,用于内存和硬盘交互数据时,一次性交互,减少IO请求,提高运行速率
  3. 创建字节缓冲流是需要依靠字节流创建,字节缓冲流仅提供缓冲区,读写数据还是依靠字节流完成

二、字节输入缓冲流

  1. BufferedInputStream(InputStream in):创建一个字节输入缓存流
  2. BufferedInputStream(InputStream in,int size):创建一个指定缓冲区大小的字节输入缓冲流
  3. int read ():读取一个字节数据,返回的是ASCII值,多次使用此方法,读取超过了内容长度,则返回-1值
  4. int read (byte[] b):读取一个字节数组的数据,返回的是存入b数组的个数,b数组中存储的是Ascii值,多次使用此方法,读取超过了内容长度,则返回-1值
  5. int read (byte[] b,int off,int len):读取长度为len的数据,放入b数组中,放入的起始索引为off,b中存放的是ASCII值,多次使用此方法,读取超过了内容长度,则返回-1值
  6. void close():关闭文件输出流并释放相关资源,没有执行close方法,多次使用read方法使用默认是上一次read的后面追加读取

三、字节输出缓冲流

  1. BufferedOutputStream(InputStream in):创建一个字节输出缓存流
  2. BufferedOutputStream(InputStream in,int size):创建一个指定缓冲区大小的字节输出缓冲流
  3. void write (int b):将指定的字节写入文件输出流,写入的是ASCII值,文件里呈现具体对应的字符,此方法一次只能写一字节数据
  4. void write (byte[] b):将b字节数组的内容写入文件输出流里面
  5. void write (byte[] b,int off,int len):将b数字中的数据,从off开始写,写入长度为len的数据
  6. void close():关闭文件输出流并释放相关资源,没有执行close,write多次使用,默认在上一次write方法后面追加写入

四、字节缓冲流复制视频

long startTime = System.currentTimeMillis();

BufferedInputStream f1 = new BufferedInputStream(new FileInputStream("C:\\java\\mynote\\1.mp4"));
BufferedOutputStream f2 = new BufferedOutputStream(new FileOutputStream("C:\\java\\mynote\\2.mp4"));
byte[] b = new byte[8192];
int flag = f1.read(b);
while (flag!=-1){
  f2.write(b);
  flag = f1.read();
}

long endTime = System.currentTimeMillis();
System.out.println("执行时间:"+(endTime-startTime));

字符流

一、使用情况

纯文本,使用字符流打开,不确定就选字节流

二、字符流的类

  1. InputStreamReader:从字节到字符的桥梁,读取字节并使用指定或默认的编码解码为字符
  2. OutputStreamWriter:从字符到字节的桥梁,将字符使用编码解码为字节

三、OutputStreamWriter使用方法

  1. OutputStreamWriter (OutputStream out):创造一个默认编码的字符输出流
  2. OutputStreamWriter (OutputStream out,String charsetName):创造一个指定编码的字符输出流
  3. void write(int c):输入ASCII值,显示ASCII值对应字符
  4. void write(string s):输入字符串
  5. void write(string s,int off,int len):输入指定长度字符串,off起始位置,长度为len,off从0开始数
  6. void write(char[] cbuf):输入字符数组
  7. void write(char[] cbuf,int off,int len):输入指定长度字符数组,off起始位置,长度为len
  8. void close():释放相关资源
OutputStreamWriter f = new OutputStreamWriter(new FileOutputStream("C:\\java\\mynote\\1.txt"),"utf-8");
f.write("中国最棒",1,2);
f.close();

四、InputStreamReader使用方法

  1. InputStreamReader (InputStream in):创造一个默认编码的字符输入流
  2. InputStreamReader (InputStream in,String charsetName):创造一个指定编码的字符输入流
  3. int read():读取一个字符,多次使用,读完返回-1
  4. int read(char[] cbuf):读取多个字符,放进字符数组里面,多次读取,读完返回-1

字符缓冲流

  1. BufferedReader(Reader in):默认缓冲区的字符缓冲输入流,Reader类一般使用FileReader类
  2. BufferedReader(Reader in,int size):指定缓冲区的字符缓冲输入流
  3. BufferedWriter(Writer out):默认缓冲区的字符缓冲输出流,Reader类一般使用FileWrite类
  4. BufferedWriter(Writer out,int size):指定缓冲区的字符缓冲输出流
BufferedWriter f1 = new BufferedWriter(new FileWriter("C:\\java\\mynote\\1.txt"));
f1.write("请问请问");
f1.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值