dポイントプレゼントキャンペーン実施中!

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発生" );
}
}
}

以上の情報で何かご存じの方がいらっしゃいましたらご教授お願いいたします。

A 回答 (1件)

Java 1.7.0 b16で再現しました



少し調査したところ、以下のような情報がヒットしましたが
面倒くさいのでよく読んでません。該当しますか?

http://bugs.sun.com/bugdatabase/view_bug.do?bug_ …
    • good
    • 0
この回答へのお礼

情報ありがとうございます。
どうやらこのことのようです。

私の英語力では心もとないのですが、どうやらWindowsのバグで、しかも直る見込みはなさそうですね。
「Related Bugs」をたどると一番最初に出たのが2001年らしいです。
6年もほっとかれるようなバグではあきらめて回避策を考えた方が利口なようですね。

お世話になりました。

お礼日時:2007/07/30 20:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!