问题如题。下面我用一段简单代码来详述我的问题:
package test;
import java.io.*;
/**
* Created by clearbug on 2017/10/5.
*/
public class IOExceptionTester {
public static void main(String[] args) throws FileNotFoundException {
FileReader fileReader = new FileReader("/private/tmp/autosignin.log");
BufferedReader bufferedReader = new BufferedReader(fileReader);
try {
String line = bufferedReader.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("Catch a IOException...");
e.printStackTrace();
}
}
}
测试代码如上。其中FileReader fileReader = new FileReader("/private/tmp/autosignin.log"); 可能会产生 FileNotFoundException 异常很容易理解;但是,为啥读取文件内容的时候即 String line = bufferedReader.readLine(); 会可能产生 IOException 呢?这里我在要读取的文件 /private/tmp/autosignin.log 是否为空均作了测试:
当文件不为空时,可以正常读取到文件中第一行的内容
当文件为空时,变量 line 为 null, 也没有异常产生
那么究竟什么时候会产生 IOException 异常呢?我看了下 BufferedReader.readLine() 方法的注释:
/**
* Reads a line of text. A line is considered to be terminated by any one
* of a line feed ('\n'), a carriage return ('\r'), or a carriage return
* followed immediately by a linefeed.
*
* @return A String containing the contents of the line, not including
* any line-termination characters, or null if the end of the
* stream has been reached
*
* @exception IOException If an I/O error occurs
*
* @see java.nio.file.Files#readAllLines
*/
public String readLine() throws IOException {
return readLine(false);
}
注释里说的是:当发生 I/O 错误时会产生 IOException 异常,那么究竟什么时候会产生 I/O 错误呢?