2

こんにちは、これを読むのに十分親切な皆さん。

私はJavaプログラムを使用していますが、作成しませんでしたが、ファイルを追加できるという問題がありますが、追加されたファイルが人間の既知の形式で圧縮されないように検証したいので、人々にzipファイルまたはrarまたは7zまたはgzなどを追加できます。

誰かがアイデアを手伝ってくれる?これも可能ですか?

前もって感謝します。

*編集:IT学生が使用するプログラム。ソースコードのファイル(.java、.class、.php、.doc、.mdb)を追加し、パスを文字列で保存し、最後にプログラムを追加します。ファイルを圧縮して教師に送信します。インストラクターが圧縮ファイルや圧縮ファイルを受け取りたくないことを知っているので、それが検証の理由です。

4

3 に答える 3

4

type基本的に、ファイルのバイトに対してunixコマンドと同等のJavaを実行します。ほとんどのファイルには指紋が埋め込まれており、他のプログラムにファイルの種類に関するヒントを提供します。この指紋は通常「マジックナンバー」と呼ばれます

7zip - '7', 'z', 0xBC, 0xAF, 0x27, 0x1C
gzip - 0x1F, 0x8B

マジックナンバーの1つの(不完全な)リストはここにあります。

一部のファイルにはマジックナンバーがありません。その場合、ファイル内で他の一般的なアイテムを探す必要があります。これは、疑わしいタイプのファイルであることを強く示唆しています。

ファイル名拡張子に依存すると、最終的に全員が拡張子の名前を変更することになります。

于 2012-09-10T16:03:24.600 に答える
1

ほとんどの圧縮されたファイルタイプには、最初に「マジックナンバー」があり、ファイルのタイプ(圧縮ファイルだけでなく、画像など)を示す数バイトがあります。既知のファイルタイプに対してファイルの内容を確認できます。あなたは「マジックナンバーファイルタイプ」でグーグルすることができます。

于 2012-09-10T16:01:41.860 に答える
0

FWIW、この関数はファイルがgzipで圧縮されているかどうかをチェックします。

public static boolean isGzipped(File f) {
    InputStream is = null;
    try {
        is = new FileInputStream(f);
        byte [] signature = new byte[2];
        int nread = is.read( signature ); //read the gzip signature
        return nread == 2 && signature[ 0 ] == (byte) 0x1f && signature[ 1 ] == (byte) 0x8b;
    } catch (IOException e) {
        Log.x(e);
        return false;
    } finally {
        Closer.closeSilently(is);
    }
}

ここでCloser.closeSilently()を参照してください。

于 2015-05-19T14:29:56.420 に答える