3

FileInputStream を使用して、基本的にテキスト ファイルを読み取り、別のテキスト ファイルに出力しようとしています。ただし、これを行うと、常に非常に奇妙な文字が表示されます。私が犯している単純な間違いだと確信しています。助けてくれてありがとう、または正しい方向に私を向けてくれてありがとう。これが私がこれまでに得たものです。

    File sendFile = new File(fileName);
    FileInputStream fileIn = new FileInputStream(sendFile);
    byte buf[] = new byte[1024];
    while(fileIn.read(buf) > 0) {
        System.out.println(buf);
    }

読み取り元のファイルは、通常の ASCII 文字の大きなテキスト ファイルです。ただし、system.out.println を実行すると、[B@a422ede. これを機能させる方法についてのアイデアはありますか?ありがとう

4

5 に答える 5

6

これは、バイト配列オブジェクトの内容を出力するのではなく、オブジェクト自体を出力するために発生します。バッファと長さから文字列を作成し、代わりにその文字列を出力する必要があります。これに使用するコンストラクタは

String s = new String(buf, 0, len, charsetName);

上記の len は、 read() メソッドの呼び出しによって返される値である必要があります。charsetName は、基になるファイルで使用されるエンコーディングを表す必要があります。

于 2013-03-19T01:21:50.343 に答える
1

ファイルから別のファイルに読み取る場合は、バイトを文字列にまったく変換しないでください。読み取ったバイトを別のファイルに書き込むだけです。

テキスト ファイルを別のエンコーディングに変換する場合は、 から読み取り、new InputStreamReader(in, sourceEncoding)に書き込みnew OutputStreamWriter(out, targetEncoding)ます。

于 2013-03-19T01:31:05.927 に答える
0

ループは次のようになります。

int len;
while((len = fileIn.read(buf)) > 0) {
        System.out.write(buf, 0, len);
    }

(a) 間違ったメソッドを使用し、(b) によって返された長さを無視してread()、それをチェックする以外に無視してい< 0.ます。したがって、各バッファの最後にジャンクを出力しています。

于 2013-03-19T04:49:01.243 に答える
0

これは、印刷bufするとバイト配列への参照が出力されるためであり、バイト自体が文字列として出力されるためです。new String(buf)バイト配列を文字列に構築する必要があります

また、独自のバッファーを作成するのではなく、BufferedReader の使用を検討してください。それを使用すると、次のことができます

String line = new BufferedReader(new FileReader("filename.txt")).readLine();
于 2013-03-19T01:37:24.137 に答える
-1

object のデフォルトの toString メソッドは、メモリ内のオブジェクトの ID を返します。バイト buf[] はオブジェクトです。

これを使って印刷できます。

File sendFile = new File(fileName);
FileInputStream fileIn = new FileInputStream(sendFile);
byte buf[] = new byte[1024];

while(fileIn.read(buf) > 0) {
    System.out.println(Arrays.toString(buf));
}

また

 File sendFile = new File(fileName);
FileInputStream fileIn = new FileInputStream(sendFile);
byte buf[] = new byte[1024];
int len=0;
while((len=fileIn.read(buf)) > 0) {
    for(int i=0;i<len;i++){
        System.out.print(buf[i]);
    }
    System.out.println();
}
于 2013-03-19T01:41:31.557 に答える