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

Java 如果文件不存在,readAllLines将返回什么?,java,file,Java,File,oracle文档说明Files.readAllLines(Path Path,Charset cs)方法将文件中的行作为列表返回 如果文件不存在,它将返回什么?另外,它将返回哪个列表的实现?以下是文件#readAllLines(Path,Charset) 它实际上使用try with resources实例化BufferedReader,并将路径作为参数。如果该文件不存在,则会在构造函数中引发一个IOException 抛出: java.io.IOException如果从文件读取时发生I/O错误

oracle文档说明
Files.readAllLines(Path Path,Charset cs)
方法将文件中的行作为
列表返回

如果文件不存在,它将返回什么?另外,它将返回哪个
列表的实现?

以下是
文件#readAllLines(Path,Charset)

它实际上使用try with resources实例化
BufferedReader
,并将
路径作为参数。如果该文件不存在,则会在构造函数中引发一个
IOException

抛出:

java.io.IOException
如果从文件读取时发生I/O错误或 读取格式错误或不可映射的字节序列

java.lang.SecurityException
对于默认提供程序,以及 安装安全管理器后,将调用checkRead方法 检查文件的读取权限


ArrayList
被用作
List

publicstaticlist readAllLines(Path-Path,Charset-cs)引发IOException{
try(BufferedReader=newBufferedReader(路径,cs)){
List result=new ArrayList();forward Java7:
如果文件不存在,它将抛出NoSuchFileException

你可以学习更多:

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

它不会“返回”任何东西。 正如前面所说,如果发生I/O错误,
readAllLines
方法将抛出一个
IOException

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

它还将返回
列表的哪个实现

这真的不是你关心的问题。这就是为什么接口和封装存在,所以你不看里面。重要的是它是一个尊重接口契约的对象

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

足够简单,可以测试吗

Exception in thread "main" java.nio.file.NoSuchFileException
至于返回值的实际类型。返回签名只显示List,这就是您可以信任的所有内容。已经说过,当前Oracle类库返回ArrayList:

List<String> readAllLines = Files.readAllLines(path, Charset.defaultCharset());
System.out.println(readAllLines.getClass());
可通过以下方式查看源中的:

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

IOException
,可能,
列表的类型是故意未指定的,可能会更改。(不过,我打赌
数组列表的
包装将是一个
不可修改的列表。
。@LouisWasserman:所以我不能确定
List.get()
是O(n)还是O(1)对于返回的
列表
?@ln78,我不担心这一点;假设它是O(1),您应该会感到相当舒服,只是不知道它是否可修改。是的,尽管我怀疑它将是ArrayList。您可以执行
List randomList=List instanceof RandomAccess?List:new ArrayList(List)
实际上不,至少在任何当前jvm中都不会,它会抛出一个java.nio.file.nosuchFileException您可能正在使用JDK7或JDK8。您最初的回答只是简单地声明了FileNotFoundException,我的回答是不在任何当前jvm中。即使是7也正式结束了生命。此外,Jav中不存在Files类或readAllLines apia 6。@MattiasIsegranBergander,你是对的。我犯了错误。Java 6中既没有Files类也没有readAllLines api。谢谢
class java.util.ArrayList
List<String> result = new ArrayList<>();