ファイルを文字列に読み込む最も簡単な方法は何ですか? [重複] 質問する

ファイルを文字列に読み込む最も簡単な方法は何ですか? [重複] 質問する

単純なテキスト ファイルを文字列に読み込もうとしています。もちろん、入力ストリームを取得して readLine() で反復処理し、内容を文字列に読み込むという通常の方法もあります。

過去に何百回もこれをやったことがあるのですが、どうすれば最小限のコード行数でこれを実行できるのか疑問に思いました。Java には、String fileContents = XXX.readFile(myFile/*File*/)これと同じくらいシンプルに見えるもののようなものはないでしょうか?

Apache Commons IO のようなライブラリがそのような簡略化を提供していることは知っていますし、これを行うための簡単な Util クラスを書くこともできます。しかし、私が疑問に思うのは、これは誰もが必要とする非常に頻繁な操作なのに、なぜ Java はこのような簡単な機能を提供しないのかということです。ファイルをデフォルトまたは指定されたエンコードで文字列に読み込む単一のメソッドは実際にはどこかに存在しないのでしょうか。

ベストアンサー1

はい、これを 1 行で実行できます (ただし、堅牢なIOException処理のためにはそうしたくないでしょう)。

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);

これは、java.util.Scannerは、入力を (\Z文字列アンカーの末尾)で区切るように指示します。これにより、最終的に入力には 1 つの実際のトークン(ファイル全体)が含まれるようになり、 を 1 回呼び出すだけで読み取ることができますnext()

があるコンストラクタは、Fileおよび を受け取りますString charSetName(他の多くのオーバーロードの中でも)。これら 2 つのコンストラクタは をスローする可能性がありますFileNotFoundExceptionが、すべてのScannerメソッドと同様に、IOExceptionこれらのコンストラクタを超えて をスローすることはできません。

自体を照会するScannerには、ioException()メソッドでIOException発生したかどうかを確認します。明示的にclose()Scannerコンテンツを読み取った後、参照をローカル変数に保存するのが最適かもしれませんScanner

参照

関連する質問


サードパーティライブラリオプション

完全を期すために、非常に評判が良く、非常に便利なサードパーティ ライブラリをお持ちの場合は、次のオプションが本当に役立ちます。

グアバ

com.google.common.io.Files多くの便利なメソッドが含まれています。ここで関連するものは次のとおりです。

アパッチ コモンズ/IO

org.apache.commons.io.IOUtils同様の機能も提供します:

  • String toString(InputStream, String encoding)
    • 指定された文字エンコーディングを使用して、の内容InputStreamString
  • List readLines(InputStream, String encoding)
    • List...の(生の)としてString、1行に1つのエントリ

関連する質問

おすすめ記事