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