Warum löst FileOutputStream FileNotFoundException aus?

8

Die Referenz zum Android-Entwickler ( diese Seite ) sagt:

%Vor%

Aber am Anfang steht:

  

Öffnen Sie eine private Datei, die dem Anwendungspaket dieses Context zum Schreiben zugeordnet ist. Erstellt die Datei, falls sie nicht bereits existiert.

Wenn dies der Fall ist, Warum würde die FileNotFoundException jemals ausgelöst werden?

Ich möchte nur sicherstellen, dass ich alle Fälle richtig handhabe. Ich benutze die Standardfunktionalität, also kann ich sie einfach in einen try..catch -Block mit nichts im catch -Block einbinden, da es nicht möglich ist, dass ein FileNotFoundException jemals in die Standardfunktionalität geworfen wird?

Bearbeiten: Beispiel für 'Standardfunktionalität':

%Vor%     
1owk3y 23.11.2013, 12:44
quelle

4 Antworten

8

Dies kann beispielsweise passieren, wenn Sie versuchen, einen Ordner zu öffnen, oder wenn die Datei, die Sie öffnen möchten, nicht existiert, Sie aber keine Berechtigung haben, sie zu erstellen.

    
Blub 23.11.2013, 12:53
quelle
3

Der ContextImpl.openFileOutput ist wie folgt auf ICS implementiert:

%Vor%

Die Funktion makeFileName stellt sicher, dass Sie hier keine Verzeichnisstruktur angeben können:

%Vor%

Obwohl dies die Fnf-Ausnahme nicht zu sehen scheint, können Sie jedoch sehen, dass sie nicht threadsicher ist, sodass f.getParentFile () diese Ausnahme möglicherweise noch auslöst, wenn ein anderer Thread entfernt wird das Verzeichnis /data/data/com.yourpkg.name/files.

    
Robin 23.11.2013 12:58
quelle
2

In meinem Fall war der Grund, dass der Name der Datei nicht OK war. Offensichtlich sind Doppelpunkte im Dateinamen nicht erwünscht.

funktioniert nicht (- & gt; FileNotFoundException):

%Vor%

Arbeiten:

%Vor%

(Differenz ist das "." anstelle von ":" zwischen HH, mm und ss im SimpleDateFormat)

    
masand 09.01.2016 21:00
quelle
1

Die häufigste Ursache ist, dass ein intermediäres Verzeichnis nicht existiert. FileOutputStream erstellt diese nicht. Es kann auch ein Berechtigungsproblem sein: Der gesamte Pfad existiert, aber Sie haben keine Erstellungsberechtigungen im endgültigen Verzeichnis oder überschreiben Berechtigungen für die tatsächliche Datei, falls sie bereits existiert.

    
EJP 24.11.2013 23:40
quelle