io流相当于文件与应用程序之间的通道一样
字节流:
字节输出流fileoutputstream 字节输出流的细节: 1.创建字节输出流对象 FileOutputStream fos = new FileOutputStream("D:\\io\\a.txt"); 细节1:参数是字符串表示的路径或者是File对象都是可以的 细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。 细节:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符 3.释放资源 fos.close(); 每次使用完流之后都要释放资源
void write(int b) 一次写一个字节数据 void write(byte[] b) 一次写一个字节数组数据 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据 参数一: 数组 参数二: 起始索引 0 参数三: 个数 3
续写: 如果想要续写,打开续写开关即可 在创建fileoutoutstream时第一个参数为路径 第二个参数为是否续写 FileOutputStream fos = new FileOutputStream("D:\\io\\a.txt",true); 开关位置:创建对象的第二个参数 默认false:表示关闭续写,此时创建对象会清空文件 手动传递true:表示打开续写,此时创建对象不会清空文件
字节输入流FileInputStream 实现需求:读取文件中的数据。(暂时不写中文) 实现步骤:创建对象 FileInputStream fis = new FileInputStream("D:\\io\\a.txt"); 读取数据 int b1 = fis.read(); System.out.println((char)b1); //此处强转为字符类型使得和文件相同 不强转显示的是ascll码表中 表示的数据。 释放资源 fis.close(); 数据存在返回的数据是 字符相对应assci码表的值 数据不存在 返回-1
字节输入流的细节: 1.创建字节输入流对象 细节1:如果文件不存在,就直接报错。 Java为什么会这么设计呢? 输出流:不存在,创建 把数据写到文件当中 输入流:不存在,而是报错呢? 因为创建出来的文件是没有数据的,没有任何意义。没有任何数据可以输入到控制台中。 所以Java就没有设计这种无意义的逻辑,文件不存在直接报错。 程序中最重要的是:数据。 2.写数据 细节1:一次读一个字节,读出来的是数据在ASCII上对应的数字 细节2:读到文件末尾了,read方法返回-1。 3.释放资源 细节:每次使用完流之后都要释放资源
//1.创建对象 FileInputStream fis = new FileInputStream("myio\\b.txt"); //2.读取数据 int b1 = fis.read(); System.out.println((char)b1); //3.释放资源 fis.close();
调用一次read 指针就向后移一位 //2.循环读取 int b; while ((b = fis.read()) != -1) { System.out.println((char) b); } 表示直到读到最后一个到没有之后 会返回-1 当返回-1时循环停止
//3.释放资源 //规则:先开的最后关闭
穿插 统计程序执行时间
long start = System.currentTimeMillis(); long end = System.currentTimeMillis(); System.out.println(end - start);
public int read(byte[] buffer) 一次读一个字节数组数据 byte[] bytes = new byte[2]; //一次读取多个字节数据,具体读多少,跟数组的长度有关 //返回值:本次读取到了多少个字节数据 int len1 = fis.read(bytes); String str1 = new String(bytes,0,len1); System.out.println(str1);
拷贝对象
//1.创建对象
FileInputStream fis = new FileInputStream("D:\\itheima\\movie.mp4");
FileOutputStream fos = new FileOutputStream("myio\\copy.mp4");
//2.拷贝
int len;
byte[] bytes = new byte[1024 * 1024 * 5];
while((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
//3.释放资源
fos.close();
fis.close();