2

私は昨日始めたばかりのJavaにまったく慣れていません。私は実践による学習の大ファンなので、それを使って小さなプロジェクトを作成しています。しかし、私はこの部分で立ち往生しています。この関数を使用してファイルを作成しました:

public static boolean writeZippedFile(File destFile, byte[] input) {
    try {
        // create file if doesn't exist part was here
        try (OutputStream out = new DeflaterOutputStream(new FileOutputStream(destFile))) {
            out.write(input);
        }
        return true;

    } catch (IOException e) {
        // error handlind was here 
    }
}

上記の方法を使用して圧縮ファイルを正常に書き込んだので、それをコンソールに読み返したいと思います。まず、解凍されたコンテンツを読み取り、そのコンテンツの文字列表現をコンソールに書き込めるようにする必要があります。\0ただし、最初のヌル文字まで文字を書きたくないという2番目の問題があります。圧縮ファイルを読み取ろうとする方法は次のとおりです。

try (InputStream is = new InflaterInputStream(new FileInputStream(destFile))) {

}

私はここで完全に立ち往生しています。問題は、「\0」までの最初の数文字を破棄し、解凍されたファイルの残りをコンソールに書き込む方法です。

4

2 に答える 2

0

文字列表現を印刷したいので、データにテキストが含まれていることを理解しています。さらに、テキストに Unicode 文字が含まれていると仮定します。これが当てはまる場合、コンソールは文字が正しく表示されるように Unicode もサポートする必要があります。

したがって、最初に文字に遭遇するまでデータをバイト単位で読み取る必要が\0あり、次に a を使用しBufferedReaderて残りのデータをテキスト行として出力できます。

try (InputStream is = new InflaterInputStream(new FileInputStream(destFile))) {

    // read the stream a single byte each time until we encounter '\0'
    int aByte = 0;
    while ((aByte = is.read()) != -1) {
        if (aByte == '\0') {
            break;
        }
    }

    // from now on we want to print the data
    BufferedReader b = new BufferedReader(new InputStreamReader(is, "UTF8"));
    String line = null;
    while ((line = b.readLine()) != null) {
        System.out.println(line);
    }
    b.close();         

} catch(IOException e) { // handle }
于 2013-08-08T20:26:06.637 に答える
0

InputStream#read()を使用して最初の数文字をスキップする

while (is.read() != '\0');
于 2013-08-08T18:34:13.943 に答える