Datei auf SD-Karte schreiben

  • 7 Antworten
  • Letztes Antwortdatum
A

Arcx

Erfahrenes Mitglied
96
Hallo Leute,

im Rahmen eines Usabiliy-Test für die Uni muss ich eine Android-App entwickeln, bei der der User Icons erkennen muss und es richtig zu Textbuttons zuordnen muss. Die Ergebnisse (inkl. Zeitdauer etc.) schreibe ich ein Array und möchte es am Ende in eine Textdatei schreiben.

Mein Problem ist, dass ich es nichtmal hinbekomme irgendwas in eine TXT auf der SD-Karte zu schreiben :( Permission in der Manifest.xml ist auf "<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>" gesetzt.

Folgenden Code habe ich:

Code:
try {
FileOutputStream save = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() +"/Dynapsys/erg.txt", true);
	 saveFile(save);
} catch (FileNotFoundException e) {
	e.printStackTrace();

und saveFile sieht so aus:
Code:
private void saveFile(FileOutputStream save){
		OutputStreamWriter writer = new OutputStreamWriter(save);
		try {
			writer.write("Hallo");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Aber es passiert einfach nichts - es gibt keine Fehlermeldung - und ne Datei sehe ich am Ende auch nicht :/

Was mache ich falsch? Wäre super, wenn mir jemand helfen könnte! :)

Danke schonmal! :)

Lg
Arcx
 
Versuch mal:

writer.write("Hallo");

writer.flush();
writer.close();
 
Leider kein Erfolg - das gleiche Verhalten wie vorher - keine Fehlermeldung, aber auch keine Datei :(
 
Ich mache es so (habs auch nur abgekupfert):

Code:
    public String doFile(boolean save, String fname, String buffer)
    {   
        File folder = new File(Environment.getExternalStorageDirectory() + "/IngCalc_1x1");
        boolean success = true;
        String aDataRow = "";

        //---
        if (!folder.exists()) 
        {   success = folder.mkdir();   // Toast.makeText(context,"schon vorhanden", Toast.LENGTH_LONG).show();
        }
        if (success) {/*Toast.makeText(context, "Ordner erstellt", Toast.LENGTH_LONG).show();*/} 
        else         {Toast.makeText(context, "could not create folder /IngCalc_1x1", Toast.LENGTH_LONG).show();   return "";}
        // ---
        fname = "/IngCalc_1x1/"+fname;  // multi_line_input.txt";  //        /sdcard/mysdfile.txt
        File file = new File(Environment.getExternalStorageDirectory(), fname);
        if (!save)
        {  buffer="";
           if (!file.exists()) {Toast.makeText(context, fname + "\nnot exists", Toast.LENGTH_LONG).show(); return "";}

           try  
           {   FileInputStream fIn = new FileInputStream(file);
               BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn, "UTF8"));
               while ((aDataRow = myReader.readLine()) != null) buffer += aDataRow + "\n";
               myReader.close();
           } 
           catch (Exception e) {Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); return "";}
           return buffer;
        }
  
        if (save)
        {  FileOutputStream fos;
           byte[] data = new String(buffer).getBytes();
           try {  fos = new FileOutputStream(file);
                  fos.write(data);
                  fos.flush();
                  fos.close();
               } 
           catch (FileNotFoundException e) 
           {   Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
           } 
           catch (IOException e) 
           {   Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
           }
           return "";
        }
        return"";
    }
 
Danke, aber wie und wo erstellst du bspw. "fname" ?
 
Sicher das er nicht im CatchBlock landet?
Ich bin mir gerade nicht sicher, ob printStackTrace auch ins CatLog geht.
Einige Texte die ich dazu gefunden hab sagen, das wäre auf /dev/null gesetzt.

Also entweder machst du dort ein ein Breakpoint rein oder du nutzt die Loggin API von Android.

Hast du es mal ohne Order versucht direkt in eine Datei zu schreiben?
Ich bin mir nicht sicher ob der FileOutputStream auch neue Ordner anlegt.
 
Arcx schrieb:
Danke, aber wie und wo erstellst du bspw. "fname" ?
Das ist doch ein Aufruf-Parameter, den Du beliebig vorgeben oder
über einen Dialog abfragen kannst.
 
Nochmal Danke an alle :)

Habs jetzt so gelöst:
Code:
try {

		    String path = Environment.getExternalStorageDirectory().getPath() + "/Dynapsys/erg.txt";
		    File f = new File(path);

		    //wenn das File nocht existiert -> Folders und File erstellen
		    if(!f.exists()) {
		        f.getParentFile().mkdirs();
		        f.createNewFile();
		    }
		    
		    BufferedWriter out = new BufferedWriter(new FileWriter(f, true));
		    
		    for(int i=0; i<MainActivity.answers.length; ++i){
		    	out.append(MainActivity.answers[i]);
		    	out.append(" ");
		    }
		    out.write("\n");
		    out.write("\n");
		    out.close();

		} catch (IOException ex) {

		    System.out.println("Error: " + ex.getMessage());
		    ex.printStackTrace();

		}

Funktioniert, er schreibt brav jedes mal in die gleiche Datei :)
 

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
488
AnnaBauer21
AnnaBauer21
D
Antworten
8
Aufrufe
764
jogimuc
J
S
Antworten
7
Aufrufe
1.201
Silvasurf
S
AnnaBauer21
Antworten
6
Aufrufe
989
AnnaBauer21
AnnaBauer21
Zurück
Oben Unten