4

char次のコードは、に格納する際のコンパイルエラーを示していbyteます。fin.read()関数によって読み取られたバイトをバイト配列に格納して出力するにはどうすればよいですか?

import java.io.FileInputStream;

class IO {
    public static void main(String args[]) {
        int i;
        int j = 0;
        FileInputStream fin = new FileInputStream("file.txt");
        byte[] b = new byte[100];
        do {
            i = fin.read();
            j++;
            b[j] = (char) i;
        } while (i != -1);
        System.out.println(b);
    }
}

出力:

possible loss of precision
found   : char
required: byte
            b[j] =(char) i;
                  ^
1 error

どうすればそれを機能させることができますか?ファイルをバイト配列に読み込んでから表示しますか?

4

5 に答える 5

2

InputStream.read(byte [])を使用してバイト配列に直接読み込むことができます

于 2012-11-10T21:07:56.533 に答える
1

次の行b[j] = (char) i;をに変更しますb[j] = (byte) i;

別のコンパイラエラーが発生します。しかし、最初の問題は解決されます。

Javaは型にUnicodeを使用しているため、最初の1つは機能せず、char2バイトあります。int値をにキャストしていますが、それを変数charに割り当てようとしています。そのためには、明示的にキャストする必要があります。これは、CでもC++でもありません。bytebyte

fin.read(b)また、ケースで最大バイトを読み取り100、EOFに達したときに-1を返す、より単純な方法を使用することを検討することもできます。iこのように、明示的ににキャストする必要はありませんbyte

たとえば、次のようになります。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

class IO {
    public static void main(String args[]) {
        byte[] b = new byte[100];
        try (FileInputStream fin = new FileInputStream("file.txt");) {
            while (true) {
                int i = fin.read(b);
                if (i < 0) {
                    break;
                }
                if (i < b.length) {
                    b = Arrays.copyOf(b, i);
                }
                System.out.println(Arrays.toString(b));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
于 2012-11-10T21:05:14.773 に答える
1

ファイルを読み取って印刷します。

    File file = new File("C:\\MyFile.txt");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
      fis = new FileInputStream(file);

      // Here BufferedInputStream is added for fast reading.
      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      // dis.available() returns 0 if the file does not have more lines.
      while (dis.available() != 0) {

      // this statement reads the line from the file and print it to
        // the console.
        System.out.println(dis.readLine());
      }

      // dispose all the resources after using them, you need to move this to the finally block and check for null!!
      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
于 2012-11-10T21:06:02.013 に答える
1

ApacheCommonsIOにある方法を使用してみてFileUtils.readFileToByteArray(file)ください。手作業でコードを書くよりも簡単です。

于 2012-11-10T21:07:14.350 に答える
1

あなたの質問に対する答えは簡単です。intをcharに変換していますが、byteとして格納したいと考えています。したがって、会話中にバイトに変換する必要があります。すなわち

import java.io.*;
class IO{
public static void main(String args[]){
    int i;
    int j=0;
    FileInputStream fin = new FileInputStream("file.txt");
    byte[] b = new byte[100];
    do{
        i= fin.read();
        j++;
        b[j] =(byte) i;
    }while( i != -1);
    System.out.println(b);
}

}

また、intとして読み取る必要はありません。charまたはbyteとして直接読み取られます。

于 2012-11-10T21:18:01.497 に答える