如果文件不存在,readAllLines会返回什么?

时间:2016-03-25 21:23:52

标签: java file

oracle文档说here Files.readAllLines(Path path, Charset cs)方法将文件中的行作为List<String>返回。
如果文件不存在,它会返回什么?它还会返回List<String>的哪个实现?

4 个答案:

答案 0 :(得分:3)

以下是cipher.encrypt cipher.key = ENV['KEY'] cipher.iv = ENV['IV']

引发的例外情况

它实际上使用try-with-ressources以Files#readAllLines(Path, Charset)为参数实例化BufferedReader。如果该文件不存在,则在构造函数中抛出path

  

抛出:

     

IOException 如果从文件中读取I / O错误或a   读取格式错误或不可映射的字节序列

     

java.io.IOException对于默认提供者,和a   安装了安全管理器,调用checkRead方法   检查对文件的读访问权。

java.lang.SecurityException用作ArrayList<String>

的确切实现
List<String>

答案 1 :(得分:2)

  

如果文件不存在,它会返回什么?

它不会“返回”任何东西。 正如JavaDoc所说,readAllLines方法会在I / O错误的情况下抛出IOException

具体来说,当文件不存在时,我正在使用的JDK 8的实现会抛出java.nio.file.NoSuchFileException,这是IOException的子类。

  

还会返回List<String>的哪个实现?

这真的不是你的顾虑。这就是存在接口和封装的原因,因此您不需要查看内部。重要的是它是一个尊重List接口契约的对象。

如果您必须知道,可以通过在返回的对象上调用.getClass()来进行检查。我正在使用的JDK 8的实现恰好返回java.util.ArrayList。另一个实现可能会返回其他内容正如我前面提到的,我们甚至不应该试着去看它是什么,以避免破坏封装的风险。

答案 2 :(得分:2)

简单到足以测试?

Exception in thread "main" java.nio.file.NoSuchFileException

关于返回值的实际类型。返回签名只是说List和那些你可以信任的东西。说过当前的Oracle类库返回ArrayList:

List<String> readAllLines = Files.readAllLines(path, Charset.defaultCharset());
System.out.println(readAllLines.getClass());

给出输出:

class java.util.ArrayList

可以通过以下方式查看来源:

List<String> result = new ArrayList<>();

答案 3 :(得分:0)

向前Java7: 如果文件不存在,它将抛出 NoSuchFileException

你可以学习更多: FileNotFoundException vs. NoSuchFileException