FileクラスのcanRead/canWriteメソッドの挙動についてお教えください。 どうにも期待した結果が得られず、困っています。 『現象』 WindowsXP上でcanReadメソッドを使用し、ファイル読み取り可能かチェックするコードを書きました。 ファイルに対し、「アクセス許可」を読み取り不能にしました。 エディタで開こうとし、拒否られることも確認しています。 ですが、canReadメソッドはtrueを返してしまいます。無論、期待しているのはtrueです。 その後ろにあるFileInputStreamオブジェクトの生成で例外となってしまいます。 『その他調査済み事項』 WindowsとUNIX系OS(HP-UX)で挙動が違うことが実験で分かりました。 HP-UXではファイルのパーミッション「r」を落とすと期待通りにcanReadはfalseを返してくれます。 『実験環境』 OS:WindowsXP JDK:1.4.2_11 『使用サンプルプログラム』 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; public class TestCanRead { public static void main( String[] args ) { File file = new File( ".\\","test.txt" ); System.out.println( "読み取り:" + (file.canRead() ? "可能" : "不可" ) ); System.out.println( "書き込み:" + (file.canWrite() ? "可能" : "不可" ) ); try{ FileInputStream is = new FileInputStream( file ); System.out.println( "FileInputStream生成成功" ); } catch( FileNotFoundException e ) { System.out.println( "FiIeNotFoundException発生" ); } catch( Exception e ) { System.out.println( "Exception発生" ); } } } 以上の情報で何かご存じの方がいらっしゃいましたらご教授お願いいたします。
↧