5

nio 2私はJava 7でパッケージを学ぼうとしていますが、そのFiles.readAllLines(Path p, Charset cs)方法を見つけました。cs私はそれが非常に便利だと思いますが、次のように、パラメーターのないバージョンが必要だと私は考えています:

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

とにかく、ほとんどの場合、メソッドはデフォルトの Charset で呼び出されると確信しているので、ショートカットがないのはなぜですか。このメソッドを持たないことを正当化する文字セットについて私が見逃しているものはありますか? Scalaにはこのオプションがあるので、私は非常に驚いています:

Source.fromFile("fileName").getLines

ですから、なぜJavaがすべきでないのかわかりません。ビューはありますか?

4

2 に答える 2

14

[...] ほとんどの場合、メソッドはデフォルトの Charset で呼び出されますが、

あまり。ほとんどの場合、ファイルがエンコードされていると予想される文字セットで呼び出されます。通常、最近では UTF-8 です。

Files.readAllLines("fileName", StandardCharsets.UTF_8)

アプリケーションは、さまざまなデフォルトの文字エンコーディングを使用して、複数のプラットフォームおよびオペレーティング システムで実行できます。そのためだけにアプリケーションが壊れることは望ましくありません。

過去からの誤った設計決定を修正するのは良い選択だと思います。古い Java メソッドの多くは、デフォルトのシステム エンコーディングを使用しているため、Windows と Linux 間などで動作やアプリケーションに一貫性がありません。文字エンコーディングの選択を強制すると、アプリケーションの移植性と安全性が向上します。


ところで、クラスについて言及しているので、クラスio.Sourceの代わりにイテレータを返すことに注意してください。利点: ファイルは遅延してロードされ、一度にすべてが huge になるわけではありません。欠点: ソースを手動で閉じる必要があります (コード スニペットではできません)。List<String>FilesArrayList<String>

于 2012-10-03T09:06:24.467 に答える
0

設計者に尋ねる必要がありますが、おそらく彼らは、ファイル全体をメモリに読み込むことは奨励されるべきではないという私の見解を共有しています。スケーリングせず、不要な時間とスペースのコストが発生します。ファイルを一度に1行ずつ処理します。

于 2012-10-03T10:15:58.393 に答える