0

私は特に Java に精通しているわけではありません。

バイト配列を文字列 (各バイトは 10 進数表現) に変換してから、ファイルに書き込みます。これは、私が抱えている問題を再現する最小限の例です (関連する場合に備えて、ファイルの名前を残しました)。

public class PacketWriter {
    public static void writeBytes(byte[] in) {
        Calendar cal = Calendar.getInstance();
        cal.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("ddmmyyHHmmss");
        PrintStream out = null;
        File outFile = null;
        try {
            outFile = new File("recpacket"+sdf.format(cal.getTime())+".txt");
            outFile.createNewFile();   // also checks for existence of file alre    ady
            out = new PrintStream(new FileOutputStream(outFile,false));
            System.out.println(Arrays.toString(in));
            out.print(Arrays.toString(in));
            out.flush();
            System.out.println("Did the writing!");
        } catch (FileNotFoundException e) {
                System.err.println("Packet output file not found.");
        } catch (IOException e) {
            System.err.println("Could not write packets (I/O error).");
        }
        finally {                   
            System.out.println("Closing...");
            if (out != null) out.close();
            System.out.println("Closed.");
        }
    }
}

呼び出すPacketWriter.writeBytes(/* some nonempty byte array */) と、次の出力が得られます。

... array ...
Did the writing!
Closing...
JVM_Close returned -1
Closed.

stdout に書き込まれます。

ファイルは返されたときに空であり、必要な文字列が含まれていません。

何がうまくいかないのですか?

4

1 に答える 1

2

このPrintStreamクラスのエラー報告は非常に貧弱です。ファイルへの書き込みが失敗しているように見えますが、その理由を知ることは不可能です。たとえば、ファイルシステムにスペースが残っていないことが原因である可能性があります。FileWriter代わりにa を使用してみてください:

    Writer out = null;

        out = new FileWriter(outFile,false);
        System.out.println(Arrays.toString(in));
        out.write(Arrays.toString(in));
        out.flush();
于 2013-08-01T13:44:03.600 に答える