2011-09-12 7 views
4

特定のディレクトリのファイル作成権限を確認する必要があります。Javaのファイル作成権限をチェックする最良の方法は何ですか

私が試した:

try { 
    AccessController.checkPermission(new FilePermission("directory_path", "write")); 
    // Have permission 
} catch (SecurityException e) { 
    // Doesn't have permission 
} 

を...しかし、これは常に(私の知る限り、これはfsの権限の基礎となるが、明示的に設定する必要がありますいくつかのJVM設定のないをチェックしますわかるてきたように)Sec​​urityExceptionをスローします。

もう一つの可能​​な方法は、このようなものを使用することでした:「C:\」例えば、私は、ファイルを作成することはできません(

File f = new File("directory_path"); 
if(f.canWrite()) { 
    // Have permission 
} else { 
    // Doesn't have permission 
} 

を...しかし、これは私が指定したディレクトリにファイルを作成できない場合でもtrueを返します管理者権限のないユーザの下でアプリケーションを実行すると、f.canWrite()がtrueを返します)。

File f = new File("directory_path"); 
try { 
    File.createTempFile("check", null, f).delete(); 

    // Have permission 
} catch (IOException e) { 
    // Doesn't have permission 
} 

を...しかし、私は、クライアントのFS上のほとんどすべてのフォルダに対して、このような許可を取得する必要があるので、これは一時的な解決策として働くことができる:

最後に、私はこれまでハッキングと同様のやりました。

上記のパフォーマンス上の問題やハッキングを引き起こすことなく、REALファイルの作成権限をうまく利用する方法を知っている人はいますか?

答えて

1

リソースの可用性と有用性をテストする最良の方法は、リソースを使用しようとすることです。この場合、new FileOutputStream(new File(dir, name))。ディレクトリが書き込み可能でないか、ファイルがすでに存在し、書き込み可能でない場合など、IOExceptionがスローされます。オペレーティングシステムは、そのコードを実行するときに、すでにすべてのチェックを実行している必要があります。それをすべて複製し、それが100%正しい場合でも、それは起こりそうもありませんが、以前の '真の'条件が非同期アクティビティのために「偽」になるタイミングウィンドウを導入しています。とにかくファイルの作成から例外をキャッチし、catchブロックにコードを記述して処理する必要があります。なぜそれらを2回書くのですか?

+0

あなたが説明したことは、基本的に私が3番目のリストで行うのと同じことです。私が言ったように、PC上に存在するほぼすべてのファイルに対して、ファイル作成権限を収集する必要があります。これらのディレクトリの分析やファイル作成にこの情報を使用します。これは私がこの "非同期活動"の可能性を持つことを意味し、私はこれで大丈夫です。問題は、すべてのフォルダ内のファイルを作成/削除するだけで、権限が適切なものではないことがわかります... –

関連する問題