io流(io流的引入与文件字节流)
io流的引入与文件字节流
-
io流:就是一根吸管,插入后,可以操作目标文件
-
io流的分类:
按方向:输入,输出
按大小:字节,字符
按处理方式:
- 处理流:“管套着管” --- 流结合流
- 节点流:直接跟目标文件接触的流
-
文件字节流
- FileInputStream(输入)
先将文件中的内容导入到程序中来
一个字符等于两个字节,所以是16位
package com.bjsxt.test01; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { //文件----->程序 //1.确定一个文件 File f = new File("D:\\a.txt");//程序连接文件 //2.将“一根管”插入源文件中去 FileInputStream fis = new FileInputStream(f); //System.out.println(fis.available());//对文件大小进行评估--------15字节 //3.开始“动作” byte[] b = new byte[8];//定义缓冲数组,数组长度为8,下面就是8个8个读字节 int n = fis.read(b);//返回数组中占用的数量 这里的read方法可以使用数组传参,不传参就是一个一个读字节,传数组长度为8的数组就是8个8个读字节 while(n!=-1){ //System.out.println(n); for (int i = 0; i <=n-1; i++) { System.out.println(b[i]);//这个循环用来查看数组里面的元素 } n=fis.read(b); } //4.关闭流 fis.close(); } }
- FileOutStream(输出)
package com.bjsxt.test01; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Test3 { public static void main(String[] args) throws IOException { //程序--->文件 //1.确定目标文件 File f = new File("D:\\a\\b.txt"); //2.将一个吸管插入目标文件中 FileOutputStream fos = new FileOutputStream(f,true);//加true就是在原来的内容上进行追加,不加就是覆盖原来的内容 //3.给一个字符串 String str=" 附加:abc你好"; //4.开始动作 byte[] bytes = str.getBytes(); /* for (byte b : bytes) { fos.write(b); } */ fos.write(bytes);//这个可以代替上面注释的代码,而且更快,上面哪个是一个一个往外输 //5.关闭流 fos.close(); } }
- FileInputStream,FileOutStream(文件的复制)
- 效率低的方法
package com.bjsxt.test02; import java.io.*; public class Test01 { public static void main(String[] args) throws IOException { //1.确定源文件 File f1 = new File("D:\\a\\b.txt"); //2.确定目标文件 File f2 = new File("D:\\a\\a.txt"); //3.将一根管插入源文件中 FileInputStream fis = new FileInputStream(f1); //4.将一根管插入目标文件中 FileOutputStream fos = new FileOutputStream(f2); //5.开始动作 int n = fis.read(); while(n!=-1){//-1就是结尾 fos.write(n); n=fis.read(); } //6.关闭流 fos.close(); fis.close(); } }
-
效率高的方法
注意:只往出写下标为[0,len)的数组,这是数组中的有效数组,不写无效的元素
package com.bjsxt.test02; import java.io.*; public class Test02 { public static void main(String[] args) throws IOException { //1.确定源文件 File f1 = new File("D:\\a\\b.txt"); //2.确定目标文件 File f2 = new File("D:\\a\\a.txt"); //3.将一根管插入源文件中 FileInputStream fis = new FileInputStream(f1); //4.将一根管插入目标文件中 FileOutputStream fos = new FileOutputStream(f2); //5.开始动作 byte[] b = new byte[6]; int len = fis.read(b);//len是数组中占用的有效长度 while(len!=-1){ fos.write(b,0,len);//把长度为6的数组中下标【0,len)这个位置的写出去 len = fis.read(b); } //6.关闭流 fos.close(); fis.close(); } }