Java 中什么时候会产生 IOException

问题如题。下面我用一段简单代码来详述我的问题:

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 是否为空均作了测试:

  • 当文件不为空时,可以正常读取到文件中第一行的内容
  • 当文件为空时,变量 linenull, 也没有异常产生

那么究竟什么时候会产生 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 错误呢?

ITMISS
浏览 993回答 1
1回答

冉冉说

在读文件过程中,有很多种情况会产生异常,例如: 磁盘损坏; 实际上读的是远程文件、可移动介质,当资源不可用时,会产生异常; 系统内部原因,如读取缓冲区占满、其他程序也在读写,导致读写超时; 所以捕获并处理异常是必要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java