2017-05-27 4 views
0

私はファイルを読み込み、FileNotFoundExeptionを取得しようとします。file.setReadable(true)の後にファイルが読み込めない

File file = new File("News.out"); 
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); 
try{ 
    in.readObject(); 
} 

ファイルが実際にディレクトリに存在することを確認し、ファイルの「読み取り可能な」プロパティをチェックします。

は、その後、私は「読める」と「書き込み可能」プロパティ

file.setReadable(true); 
    file.setWritable(true); 
    System.out.println(file.canRead()); 
    System.out.println(file.canWrite()); 

のprogrammatical設定を追加し、偽偽のログに入りました。

これは何故ですか?

EDIT:

私はJSR 203を試してみましたが、このコードを使用します。

Path path = FileSystems.getDefault().getPath(filename); 
try(
    final InputStream in = Files.newInputStream(path); 
) { 
    ObjectInputStream objectInputStream = new ObjectInputStream(in); 
    newsStorage.setEntities((ArrayList<News>) objectInputStream.readObject()); 
} catch (NoSuchFileException e) { 
    createFile(path, filename); 
    handleException(e); 
} 

とのCreateFile()メソッド:

private void createFile(Path path, String string) { 
    try { 
     Files.newOutputStream(path, StandardOpenOption.CREATE); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
} 

ファイルが作成されませんでした。

Files.newOutputStream(path, StandardOpenOption.CREATE); 

がファイルを作成する必要があることを、私が正しく理解していますか?

+0

アプリケーションをどのように実行しますか? –

+0

@Ortomala Lokni Eclipse RCPアプリケーションです。Eclipse IDEからRun Configurationを使用して実行します。 –

+0

'System.getProperty(" user.dir "))'を印刷し、 'News.out'が内部にあるかどうかを確認してください。 –

答えて

2

自分で好きなようにしてください。File。代わりにJSR 203を使用してください。

試してみて、使用:

try (
    final InputStream in = Files.newInputStream("News.out"); 
) { 
    // work with "in" here 
} 

あなたは開口部を実行することができないなら、あなたは少なくとも、正確に間違っている何をすることができたことがないFile何かをあなたに伝える例外があります。

その後、ファイルに対するアクセス権を設定する場合は、JSR 203でもそうすることができますが、それは基礎となるファイルシステムの機能に依存します。あなたのファイルシステムがPOSIX互換ならば、たとえばthis methodを使うことができます。しかし、ファイルのパーミッションも変更できないこともあります。

+0

ありがとうございます。 JSR 203を使用しようとしましたが、ファイルが作成されず、NoSuchFileExceptionが発生しました。私は最初の投稿を更新しました。私はすべてのことを正しくやったのですか? –

+0

ファイルが作成されなかった場合は、パスのディレクトリが存在しなかったことを意味します。たとえば、 'a/b/c'を作成しようとしたのにディレクトリ' a/b'が存在しない場合、その例外が発生します。ディレクトリ 'a/b'を最初に作成する必要があります。 – fge

関連する問題