为什么不是java 7中的Files.readAllLines(String path)?

Chi*_*rlo 6 java java-7 nio2

我正在尝试学习nio 2Java 7中的包,我偶然发现了这个Files.readAllLines(Path p, Charset cs)方法.我发现它非常有用,但我认为应该有一个没有cs参数的版本,就像:

 public static List<String> readAllLines(String path)
    throws IOException
{ return readAllLines(Paths.get(path), Charset.defaultCharset());}
Run Code Online (Sandbox Code Playgroud)

我确信无论如何大多数时候都会使用默认的Charset调用该方法,所以为什么没有shorcut.是否有任何关于charsets的遗漏可以证明没有这种方法?我很惊讶,因为Scala有这个选项:

Source.fromFile("fileName").getLines
Run Code Online (Sandbox Code Playgroud)

所以我不明白为什么Java不应该.任何意见?

Tom*_*icz 14

[...]大多数情况下,无论如何都会使用默认的Charset调用该方法,

并不是的.大多数情况下,它将使用您期望文件编码的字符集进行调用.通常这些天它是UTF-8:

Files.readAllLines("fileName", StandardCharsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)

您的应用程序可以使用不同的默认字符编码在多个平台和操作系统上执行.您不希望您的应用程序因此而中断.

我认为这是一个很好的选择,从过去修复错误的设计决定.许多旧的Java方法使用默认的系统编码,导致不一致的行为或应用程序,例如在Windows和Linux之间.强制选择字符编码只会使您的应用程序更加便携和安全.


顺便说一句,因为你提io.Source级-注意,它返回,而不是一个迭代器List<String>作为Files类一样.优点:文件被懒惰地加载,而不是一次性加载到巨大的文件ArrayList<String>.缺点:您必须手动关闭源代码(您无法在代码段中执行此操作).