一、LO流介绍:
lo流是用来处理设备之间数据传输的!
二、 lo流分类:
流向分类
输入流(inputStream和Reader):
输出流(OutputStream和Writer):
如:内存卡和硬盘!
硬盘内数据传入内存卡则是输入流!内存卡向硬盘传输数据则是输出流!
操作类型分类
字节流(inputStream和OutputStream):字节流可以操作任何数据(计算机数据都是字节形式存储)
字符流(Reader和Writer):字符流只能操作纯字符数据,防止乱码
相对路径和绝对路径:
相对路径:指某个文件路径和别的文件路径关系的
绝对路径:硬盘是真正存在的路径!
三、常用Io流类:
四、
目的:使用FileInputStream读取文件
* 思路:
* 使用FileInputStream读取文件
* 项目右键创建File,创建txt文件
* 在txt输入字符
* 返回public页面,
* 建立和txt通道(找到txt绝对路径)
* 打印txt字符
代码:
public class FilelnputStreamText01 { public static void main(String[]ages){ FileInputStream fis=null; // 使用读取文件,需要添加被读取路径,加双\,在异常最大化,(路径寻找,a.txt右击properties就可以找到路径) try { //建立通道 //fis =new FileInputStream("D:\myeclipse\chapter_01\a.txt");
// 相对路径
fis =new FileInputStream("a.txt");
//无参类型,返回int值,如果打印的是字母(字码值)读取完毕返回-1 //第一种打印 /*System.out.println(fis.read()); System.out.println(fis.read());*/ //第二种打印!效率不高,一个一个字符打印 /* int temp; while((temp = fis.read()) != -1){ //强行转换为char类型,java数值用unicode表示,转换为char类型就可以用原来数值来表示 char c = (char)temp; System.out.println(c);*/ /* }*/ //第三种打印 //定义byte数组告诉系统一次读取几个字节,减少内存和硬盘之间通信,可以提高效率 byte[]arr=new byte[5]; int temp; //有参的read方法返回的int值是读取几个字节 while((temp = fis.read(arr)) !=-1){ System.out.println(new String(arr,0,temp)); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //finally即使上面代码报错,finally里面代码也会执行,close减少内存 }finally{ try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
运行结果:第一种方法,打印几个,就运行几个结果!代码比较重复
第二种方法:全部打印出来,只不过字符却是一个一个被打印出来:如:123,打印出来就是:1,2,3(隔一行)
第三种方法:直接全部打印出来,只要给byte字节数(字符位数)!
注意:开发中分隔符最好不要直接写:File.separator(写上这一句话,连接路径就没得问题了)
fis =new FileInputStream(“file”+ File.separator+"a.txt",true);