4

外部のC++アプリケーションがこのファイルを読み取る必要があるため、整数をリトルエンディアン(Javaはビッグエンディアンを使用)で表す4バイトのファイルに書き込む必要があります。私のコードはファイルに何も書き込みませんが、バッファにはデータが含まれています。なぜ?私の機能:

public static void copy(String fileOutName, boolean append){
    File fileOut = new File (fileOutName);

    try {
         FileChannel wChannel = new FileOutputStream(fileOut, append).getChannel();

         int i = 5;
         ByteBuffer bb = ByteBuffer.allocate(4);
         bb.order(ByteOrder.LITTLE_ENDIAN);
         bb.putInt(i);

         bb.flip();

         int written = wChannel.write(bb);
         System.out.println(written);    

         wChannel.close();
     } catch (IOException e) {
     }
}

私の電話:

copy("prueba.bin", false);
4

1 に答える 1

6

何かが失敗した理由がわからない場合は、空のtry-catchブロックの例外を無視することはお勧めできません。

ファイルを作成できない環境でプログラムを実行している可能性は非常に高いです。ただし、このような例外的な状況に対処するために行った指示は、何もしないことです。したがって、実行しようとしたが、何らかの理由で失敗したプログラムがあり、その理由を表示することさえしないことで処理された可能性があります。

これを試して

public static void copy(String fileOutName, boolean append){
    File fileOut = new File (fileOutName);

    try {
         FileChannel wChannel = new FileOutputStream(fileOut, append).getChannel();

         int i = 5;
         ByteBuffer bb = ByteBuffer.allocate(4);
         bb.order(ByteOrder.LITTLE_ENDIAN);
         bb.putInt(i);

         bb.flip();

         int written = wChannel.write(bb);
         System.out.println(written);    

         wChannel.close();
     } catch (IOException e) {
// this is the new line of code
         e.printStackTrace();
     }
}

そして、なぜそれがすぐに機能しないのかがわかると思います。

于 2012-06-13T16:38:19.190 に答える