File与IO流之字节流

笔记哥 / 05-28 / 40点赞 / 0评论 / 406阅读
## FileOutputStream 1. 创建字节输出流对象`FileOutputStream fl =new FileOutputStream()` - 传入的参数可以是字符串路径或者File对象(实际上如果传入字符串也会在内部创建File对象) - 如果文件不存在会在创建一个文件,但是必须保证其父级路径是存在的,这个和File是相似的 - 如果文件存在,则会清空文件,你可以选择传入第二个参数(boolean),让对象是可以续写的 1. 写数据`fl.write(92)` - 写入整数,显示对应ascii码值 - 如果想一口气将字符写入文件: ```java String str="hello World!" byte byte1[]=str.getBytes(); fl.write(byte1); ``` - 可以写入byte数组,并给出起始位置和总长度(可以不给) - 如果想让数据换行可以传入: ```java String str="\n" byte byte1[]=str.getBytes(); fl.write(byte1); ``` 1. 释放资源 - 使用完都要进行释放,相当于解除对文件的占用 ## FileinputStream 1. 创建字节输入对象`FileInputStream fl =new FileInputStream()` - 如果文件不存在,直接报错 1. 读取数据`fl.read()` - 读取字节数据,将数据进行返回,且读取一次数据,就移动到下一个 - 读到文件末尾方法返回-1 1. 释放资源 ## 练习:复制粘贴,并显示花费时长(毫秒) ```java package Java_test; import java.io.*; public class Test {public static void main(String[] args) throws IOException{ File fl =new File(".\\5.jpg"); FileInputStream infile = new FileInputStream("C:\\Users\\Lenovo\\Pictures\\5665.jpg"); FileOutputStream outfile = new FileOutputStream(fl); int b=0; long start = System.currentTimeMillis(); while ((b = infile.read()) != -1) { outfile.write(b); } System.out.println("复制粘贴完成"); long end = System.currentTimeMillis(); System.out.println("总共花费时长:" + (end - start) + " 毫秒"); outfile.close(); infile.close();} } ``` 以上练习可以看出,一个字节一个字节进行读取速度会非常慢,为了更快的进行数据传输我们可以用`int len = outfile.read(bytes)`其中,`bytes`是字节型字符串,这行代码会读取文件中的数据,并尽可能的填满数组,读取的数据会从头对数组进行覆盖,如果覆盖不完全会使后面出现多余数据,其中数组长度最好是1024的整数倍 所以,我们可以利用他的返回值,`len`这个指的是读取数据的长度,`System.out.println(new String(bytes,0,len));`这个String是将从0开始`len`长度的数据转成字符串,并进行输出