2017-05-27 16 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()); 

的程序化設置和日誌假的,假的了。

這可能是什麼原因?

編輯:

我試圖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應用程序,我使用Run Configuration從Eclipse IDE運行它。 –

+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