8

Java 6 アプリケーションを作成していて、ファイルが読み取り可能かどうかを確認する必要があります。ただし、Windows ではcanRead()常に を返しますtrue。したがって、おそらく唯一の解決策は、WINAPI に基づいて JNA/JNI で記述されたネイティブ ソリューションである可能性があります。

しかし、ファイルへのアクセスに関する情報を返す単純な関数を WINAPI で見つけるのが難しいため、別の問題があります。私は見つけましたがGetNamedSecurityInfoGetSecurityInfo私は高度な WINAPI プログラマーではなく、JNA/JNI に関連して私には複雑すぎます。この問題に対処する方法はありますか?

4

5 に答える 5

8

次のコードを使用してみてください

public boolean checkFileCanRead(File file){
    try {
        FileReader fileReader = new FileReader(file.getAbsolutePath());
        fileReader.read();
        fileReader.close();
    } catch (Exception e) {
        LOGGER.debug("Exception when checking if file could be read with message:"+e.getMessage(), e);
        return false;
    }
    return true;
}
于 2012-08-10T12:50:41.977 に答える
6

このように、 FilePermissionAccessControllerをより強力に使用できます。

FilePermission fp = new FilePermission("file.txt", "read");
AccessController.checkPermission(fp);

要求されたアクセスが許可されている場合、checkPermissionは静かに戻ります。拒否された場合、AccessControlExceptionがスローされます。

于 2012-08-10T12:51:01.147 に答える
4

あなたがそれを読むつもりなら、それが読めるかどうかだけを知る必要があります。ですから、必要なときに読んでみて、できない場合は対処してください。リソースの可用性をテストする最善の方法は、それを使用して、発生した例外やエラーに対処することです。未来を予測しようとしないでください。

于 2012-08-11T03:12:06.613 に答える