2016-10-20 3 views
0

Wenn ich auf eine Schaltfläche klicke, wird eine Datei erstellt und ein ganzzahliger Wert wird in die Datei geschrieben. Wenn ich auf eine andere Schaltfläche klicke, wird der Wert aus der Datei extrahiert. Wenn ich die App schließe und neu starte, kann die Datei nicht gefunden werden. Liegt es daran, dass die Datei in de android erstellt wurde: onCLick-Methode?Android Studio: Datei kann nach dem Neustart der App nicht geöffnet werden

hier sind die zwei Methoden:

schreiben:

public void buttonAddClick (View view){ 

    file = new File(directory, "file" + c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH) + ".txt"); 
    if (!file.exists()) { 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    try { 
     BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file,true)); 
     bufferedWriter.append(editAm.getText()); 
     bufferedWriter.append("\n"); 
     bufferedWriter.close(); 
     editAm.setText(null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

lesen:

public void buttonShowClick(View view) { 


    try { 
     BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); 
     zwischensumme = 0; 
     String line; 

     while ((line = bufferedReader.readLine()) != null) { 
      zwischensumme += Double.parseDouble(line); 
      line = ""; 
     } 
     bufferedReader.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
     catch (NumberFormatException e){ 
     e.printStackTrace(); 
     file.delete(); 
    } 

} 
+0

Was sagt Logcat? – Shmuel

+0

In welchem ​​Verzeichnis befindet sich die Datei? interner Speicher oder extern oder temporär? –

+0

@Kilanny es ist intern: neue Datei (getFilesDir() + "/", MP); – Vale

Antwort

0

Sie können mit Ihrer Dateivariable verwirrt werden. Es scheint eine Instanzvariable Ihrer Klasse zu sein. Es wird in ButtonAddClick insistiert. Wenn Sie Ihre App jetzt erneut ausführen, wird sie nicht instanziiert, sondern in buttonShowClick verwendet (soweit wir das sehen können).

Ich denke, es ist null.

1

Sieht aus wie Sie eine NumberFormatException bekommen könnte.
Überprüfen Sie stacktrace, um zu sehen, ob Sie in den catch (NumberFormatException e) Block gelangen.
Wenn Sie in diesen Block fallen, dann wird die Datei in der Tat aufgrund Ihrer catch-Block gelöscht:

catch (NumberFormatException e){ 
     e.printStackTrace(); 
     file.delete(); 
    } 

Auch Hermann Klecker ist richtig. Sie benennen Ihre Datei basierend auf dem Datum.
Sie zeigen nicht, wie Sie die Datei im Leseteil abrufen. Basiert es auf einem Dateinamen?

Wie Sie die Dateinamen nicht (wegen Datum/Zeit-Relation) wissen können etwas tun, wie so in onResume if (file == null):

File directory = new File("/path/to/directory"); 
File[] foundFiles = directory.listFiles(new FilenameFilter() { 
    public boolean accept(File dir, String name) { 
     return name.startsWith("file"); 
    } 
}); 

if (!foundFiles.isEmpty()) { 
    file = foundFiles[0]; 
} 

diese Weise, wenn die erste Name-Datei mit ‚Datei‘ starten, wird verwendet

+0

danke für die Antwort, aber es wird nicht in NumberFormatException Block fallen ... – Vale

Verwandte Themen