public static void readline1() {
try {
FileReader fr = new FileReader("F:\\MENU\\interview-final\\2.txt");
BufferedReader br = new BufferedReader(fr);
String readoneline;
int l = 0;
while ((l = br.read()) != -1) {
readoneline = br.readLine();
System.out.println(readoneline);
}
br.close();
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void readline2(){
    String FilePath = "F:\\MENU\\interview-final\\2.txt";
        FileReader fr = null;
        BufferedReader br = null;
        StringBuffer sBuffer = new StringBuffer();
        try
        {
            try
            {
                fr = new FileReader(FilePath);// 建立FileReader对象,并实例化为fr
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            br = new BufferedReader(fr);// 建立BufferedReader对象,并实例化为br
            String line = br.readLine();// 从文件读取一行字符串
            // 判断读取到的字符串是否不为空
            while (line != null)
            {
                sBuffer.append(line);
                sBuffer.append("\n");//换行
                line = br.readLine();// 从文件中继续读取一行数据
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (br != null)
                    br.close();// 关闭BufferedReader对象
                if (fr != null)
                    fr.close();// 关闭文件
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        // 输出读取的结果
        System.out.println(sBuffer);
}OK,2个方法,目的是要实现同一个功能。不许运行。说出不同?恩 在写代码中遇到的分享之。

解决方案 »

  1.   

    第二个函数多了一行下面的代码:
        sBuffer.append("\n");//换行
    第二个多出来应该是跟在文件中看到的效果是一样的。第一个函数的代码读出的内容如果放到文件中,是都缩在一行的一个大字符串,不会换行,除非 工具强制换行。
      

  2.   

    异常的分析就不说了,比如第一个FileReader fr = new FileReader("F:\\MENU\\interview-final\\2.txt");出错就没有任何输出(除了异常打印),而第二个最后总会有个输出System.out.println(sBuffer); 第一个读出异常时流不会关闭,第二个会关闭等等
    就针对流的读取而言,第一个的没一行都会比第二个的没一行少一个字节,因为第一个是read先读一个字节,然后再读一行,第二个是直接取一行
      

  3.   

    第二个其实逻辑更严谨,当F:\\MENU\\interview-final\\2.txt 存在时,两个程序没有区别,而且都能正常运行,但是当不存在或者已经被删除时,那么第一个程序 在  FileReader fr = new FileReader("F:\\MENU\\interview-final\\2.txt"); 就会抛出异常
      

  4.   

    System.out.println(sBuffer);
    ???需要 toString??- 囧