按操作数据单位分为:字节流(非文本)和字符流(文本数据)
按数据的流向分为:输入流和输出流
按流的角色分为:节点流和处理流
public class test{ public static void main(String[] args) { FileReader fr = null; try { //1.实例化File类的对象,指明需要操作的文件 File file = new File("hello.txt"); //2.提供具体的流 fr = new FileReader(file); //3.数据的读入 int data; while((data=fr.read())!=-1){ System.out.print((char)data); } } catch (IOException e) { e.printStackTrace(); }finally { //4.流的关闭操作 try { if(fr!=null) fr.close(); } catch (IOException e) { e.printStackTrace(); } } } }
FileReader fr=null; try { File file = new File("hello.txt"); fr = new FileReader(file); char[] cbuf=new char[5]; int len; while((len=fr.read(cbuf))!=-1){ // for(int i=0;i<cbuf.length;i++){ // System.out.println(cbuf[i]); // }//错误写法 // for(int i=0;i<len;++i){ // System.out.print(cbuf[i]); // }//正确写法1 String s = new String(cbuf, 0, len); System.out.print(s); } } catch (IOException e) { e.printStackTrace(); } finally { if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } }