2017-05-27 4 views
0

Ich versuche, die Datei zu lesen und FileNotFoundExeption zu erhalten.Datei ist nicht lesbar nach file.setReadable (true)

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

Ich überprüfe, dass die Datei wirklich in dem Verzeichnis vorhanden ist und überprüfen Sie "lesbare" Eigenschaft der Datei.

Dann habe ich programmatische Einstellung von „lesbar“ und „beschreibbaren“ Eigenschaften

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

Und bekam in Protokollen falsch, falsch.

Was könnte der Grund dafür sein?

EDIT:

Ich habe versucht, JSR 203 und diesen Code verwenden:

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); 
} 

Und Createfile() -Methode:

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

Datei wurde nicht erstellt.

Habe ich das richtig verstanden, dass

Files.newOutputStream(path, StandardOpenOption.CREATE); 

eine Datei erstellen soll?

+0

Wie starten Sie Ihre Anwendung? –

+0

@Ortomala Lokni Es ist Eclipse RCP-Anwendung, ich führe es von Eclipse IDE mit Run Configuration. –

+0

Drucken Sie 'System.getProperty (" user.dir "))' und prüfen Sie, ob 'News.out' drin ist. –

Antwort

2

Tun Sie sich einen Gefallen und lassen Sie File fallen. Verwenden Sie stattdessen JSR 203.

Versuchen und Verwendung:

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

Wenn Sie die Öffnung nicht durchführen können, dann werden Sie zumindest eine Ausnahme haben Sie zu sagen, was genau falsch ist, etwas File nie in der Lage gewesen zu tun.

Danach, wenn Sie Berechtigungen für die Datei festlegen möchten, können Sie dies auch mit JSR 203 tun, aber das hängt von den Funktionen des zugrunde liegenden Dateisystems ab. Wenn Ihr Dateisystem POSIX-kompatibel ist, können Sie beispielsweise this method verwenden. Es kann aber auch sein, dass Sie die Berechtigungen der Datei nicht ändern können.

+0

Vielen Dank für Ihre Antwort. Ich habe versucht, JSR 203 zu verwenden, aber Datei wurde nicht erstellt, und ich bekam NoSuchFileException. Ich habe den ursprünglichen Beitrag aktualisiert. Könnten Sie bitte sagen, habe ich alles richtig gemacht? –

+0

Wenn die Datei nicht erstellt wurde, bedeutet das, dass ein Verzeichnis des Pfades nicht existiert. Wenn Sie beispielsweise versuchen, 'a/b/c' zu erstellen, aber das Verzeichnis 'a/b' nicht existiert, erhalten Sie diese Ausnahme. Sie müssen zuerst das Verzeichnis 'a/b' erstellen. – fge

Verwandte Themen