小さなユーティリティアプリケーションは、GUIファイルセレクタを介して出力ディレクトリをユーザに尋ねます。 それは何らかの処理の後でこの出力ディレクトリにたくさんのファイルを作成します。ファイル内にファイルを作成する前にディレクトリへの書き込みアクセスを確認する
私はアプリケーションがユーザに通知し、 が私の最初の試みは、canWrite(だった(長い時間がかかる可能性がある)処理を続行しないように書き込みアクセス権を持っているかどうかを確認する必要があり
)メソッドjava.io.File。しかし、これは で動作しません。なぜなら、ディレクトリエントリ自体を扱い、その内容は扱っていないからです。私は少なくとも 名前を変更または削除することができますが、(許可のために) ファイルが作成されないWindows XPフォルダの1つのインスタンスを見てきました。これは実際に私のテストケースです。
私は最終的にそれだけで操作が成功した場合、実際のファイルとチェックを作成しようとするので、しかし、これは私にエレガントな感じがしない以下のソリューション
//User places the input file in a directory and selects it from the GUI
//All output files will be created in the directory that contains the input file
File fileBrowse = chooser.getSelectedFile(); //chooser is a JFileChooser
File sample = new File(fileBrowse.getParent(),"empty.txt");
try
{
/*
* Create and delete a dummy file in order to check file permissions. Maybe
* there is a safer way for this check.
*/
sample.createNewFile();
sample.delete();
}
catch(IOException e)
{
//Error message shown to user. Operation is aborted
}
と和解。
私はこれまでに見つかったすべての解決方法が必要だと思っています。 セキュリティマネージャとスタンドアロンアプリケーションではなく、Javaアプレットを取り扱っています。 何か不足していますか?
は、実際にファイルを書き込む前に、ディレクトリ内のファイルアクセスをチェックする方法をお勧めは何ですか?
私はそれはあなたが最終パスにcanWrite
を起動しても動作しますないJava 5に
"empty.txt"が既に存在する場合はどうなりますか?その後重要なファイルが削除されてしまいます。 –
はい、ファイルが実際には作成されなかったかどうかを理解するためにcreateNewFile()によって返されたブール値が使用された場合に最適です。 – kazanaki