1

特定のバイナリ ファイルに書き込みアクセス権があるかどうかを確認する必要があります。ファイル クラス API にはバグがあり、JDK7 で修正されましたが、アップグレードすることはできません。

バグへのリンクは次のとおりです: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6203387

FileOutputStream を開くと、バイナリ ファイルが破損し、エクスプローラーでサイズがゼロと表示され、起動できません。これがコードスニペットです。

OS: Win7

出力ストリームを開くだけで (何も書き込まずに) バイナリ ファイルが破損する理由を理解してください。この問題の回避策はありますか?

コード スニペットは次のとおりです。

private boolean hasWriteAccess(File file) {
    FileOutputStream fos = null; 
    try {
        fos = new FileOutputStream(file);
    } catch (Exception e) {
        e.printStackTrace();
        if(fos != null) {
            try {
                fos.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
        return false;
    }
    return true;
}
4

2 に答える 2

6

FileOutputStream を開くと、バイナリ ファイルが破損し、エクスプローラーでサイズが 0 と表示される

ファイルを破損するのではなく、ファイルを切り捨てます。

「追加」モードで開きたい場合は、それを可能にするコンストラクターのオーバーロードを使用します。

fos = new FileOutputStream(file, true);

あなたのコードを見ると、それはほぼ間違いなくあなたがやりたいことです。

Andrew が言うように、常にストリームも閉じる必要があります。

于 2012-10-26T10:53:11.607 に答える
1

使用するとき

new FileOutputStream(file);

ファイルは常に切り捨てられます。

ファイルを切り捨てずに開きたい場合は、代わりに追加を使用できます。

new FileOutputStream(file, true).close();
于 2012-10-26T10:54:11.040 に答える