7

本当にわからない、なぜこれがたくさんのクラスを持つファイルを読むためだけにとても複雑で難しいのか

  • InputStream
  • DataInputStream
  • InputStream
  • BufferReader

以下の利点は何ですか?そして、ここでの哲学は何ですか?

private static String fileToString(String filename) throws IOException
{
    InputStream resourceAsStream;
    resourceAsStream        = "".getClass().getResourceAsStream(filename);
    DataInputStream in      = new DataInputStream(resourceAsStream);
    BufferedReader reader   = new BufferedReader(new InputStreamReader(in));
    StringBuilder builder   = new StringBuilder();
    String line;    
    // For every line in the file, append it to the string builder
    while((line = reader.readLine()) != null)
    {
        builder.append(line);
    }
    return builder.toString();
}
4

5 に答える 5

10

パスがあるファイルを読みたい場合は、次のようにすることもできます。

List<String> lines = Files.readAllLines(Paths.get("/path/to/your/file"), charset);

注:Java7以降が必要です

于 2012-08-24T16:33:18.213 に答える
9

哲学は柔軟性の1つです。さまざまなタイプのデータストリームを使用して、バイト、テキスト行、ユーザー定義オブジェクト全体など、さまざまなタイプのデータを一度に1つずつI/Oソースとの間で簡単に読み書きできます。

Javaチュートリアルから-I/Oストリーム:

I / Oストリームは、入力ソースまたは出力宛先を表します。ストリームは、ディスクファイル、デバイス、その他のプログラム、メモリアレイなど、さまざまな種類のソースと宛先を表すことができます。

ストリームは、単純なバイト、プリミティブデータ型、ローカライズされた文字、オブジェクトなど、さまざまな種類のデータをサポートします。一部のストリームは単にデータを渡します。他の人は、便利な方法でデータを操作および変換します。

レッスントレイルレッスン:基本的なI / Oから始めて、Java I/Oの概要を理解してください。


Javaでさまざまなデータ型のI/Oを単純化する方法の具体例を確認したい場合は、Sedgewick&Wayneの標準ライブラリのIn.javaクラスとOut.javaクラスを確認することをお勧めします。

于 2012-08-24T16:38:42.610 に答える
1

InputStreamを2回言ったので、実際には3つだけです;)しかし、ファイルを格納できるものが異なるため(シリアル化されたオブジェクト、画像、テキストなど)、それらはすべて共通のベース(InputStream)を持っています。 。次に、基本的なテキストの場合、ファイルから/へのこの特定のタイプの保存/読み取りを処理するための新しいクラスBufferedReaderがあります。最後に、BufferReaderは効率を上げるためだけにあります。あなたはそれを望まないかもしれないので、そのオプション

また、JohanSjöbergは正しいです。そこにDataInputStreamは必要ありません。次のようにするだけです。

BufferedReader reader   = new BufferedReader(new InputStreamReader(resourceAsStream));
于 2012-08-24T16:28:49.570 に答える
0

難しいことではありません。ProjectLombokをチェックアウトしてください。単一のjarファイルを単純に含めると、ファイルの読み取りは次のようになります。

@Cleanup InputStream in = new FileInputStream("File.txt");
byte[] b = new byte[10000];
while (true) {
 int r = in.read(b);
 if (r == -1) break;
}
于 2012-08-24T16:34:10.313 に答える
0

不要なものを省いてコードを少し短くすることができ、代わりに次DataInputStreamを使用することができます。FileReader

private static String fileToString(String filename) throws IOException {
    BufferedReader reader   = new BufferedReader(new FileReader(filename));
    StringBuilder builder   = new StringBuilder();
    String line;    
    // For every line in the file, append it to the string builder
    while((line = reader.readLine()) != null)
        builder.append(line);
    return builder.toString();
}

また、 http: //rosettacode.org/wiki/Read_entire_file#Javaで次のワンライナーを見つけました。

new Scanner(new File("foo"), "UTF-8").useDelimiter("\\A").next();
于 2012-08-24T16:45:54.810 に答える