import java.io.*; public class Start { public void readAndRead() { try { FileReader fr = new FileReader("need.txt");//需要读取的文件路径 BufferedReader br = new BufferedReader(fr); String s = br.readLine(); while(s!=null)//如果当前行不为空 { System.out.println(s);//打印当前行 s= br.readLine();//读取下一行 } br.close();//关闭BufferReader流 fr.close(); //关闭文件流 }catch(IOException e)//捕捉异常 { System.out.println("指定文件不存在");//处理异常 } } public static void main(String [] args) { Start start = new Start(); start.readAndRead(); } }
1) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); 2) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in); BufferedReader bufReader=new BufferedReader(inReader); 3) File file = new File ("hello.txt"); FileReader fileReader=new FileReader(file); BufferedReader bufReader=new BufferedReader(fileReader); 1) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in); BufferedReader bufReader=new BufferedReader(inReader); 2) FileInputStream in=null; File file = new File ("hello.txt"); in=new FileInputStream(file); BufferedReader bufReader=new BufferedReader(new InputStreamReader(in)); 3) File file = new File ("hello.txt"); BufferedReader bufReader=new BufferedReader(new InputStreamReader(new FileInputStream (file))); 上述两种写法的微小区别: a)第二种方式中把“FileInputStream in=null;”定义单独放在开始处,说明下面应该还有要用到in对象变量的地方;(BufferedReader处用了) b)第二种方式没有定义InputStreamReader的对象变量,直接在BufferedReader的构造函数中new一个,这种方式与第一种方式的主要区别:InputStreamReader对象只使用一次!这对于在这里只需要使用一次这个InputStreamReader对象的应用来说更好;无需定义InputStreamReader的对象变量,接收由new返回的该对象的引用,因为下面的程序中不需要这个InputStreamReader的对象变量,所以无需定义;所以这种情况下,第二种方式比第一种更好一些。 c)第三种方式中,典型的三层嵌套委派关系,清晰看出Reader的委派模式(《corejava》12章有图描述该委派关系),FileInputStream和InputStreamReader都没有定义变量,new生成的对象都只是使用一次。 d)三种方式的区别也就在于FileInputStream和InputStreamReader对象是否都只使用一次,是否需要定义它们的对象变量,以及个人的编码习惯。 e)但是要注意异常处理,FileInputStream(file)会抛出NotFileFoundException,如果采用 surround方式(try&catch)处理,应该用第二种方式,这样可以用System.out.println提示文件未找到;当然在函数名后使用throws Exception,然后用第三种方式也行,但似乎这适合有用户界面的情况,把异常抛出在客户端在处理。