2015-07-30 9 views
8

Wie der Titel darauf hinweist, habe ich Probleme beim Schreiben von Dateien auf den externen Speicher. Mein Debug-Gerät ist ein Nexus 5. Die Sache ist, ich bin in der Lage, Dateien perfekt vom Gerät zu lesen (ich habe mit denen im Download-Ordner versucht), kann aber nicht schreiben. Mir ist bewusst, dass ich dies tun muss, solange das Gerät nicht mit dem Computer verbunden ist. Aber es funktioniert auch nicht.Schreiben von Dateien auf externen Speicher in Android fehlgeschlagen

In der Tat habe ich versucht, den Zustand der SD-Karte vor dem Schreiben zu lesen (was natürlich nicht funktioniert). Der Zustand zeigte sich als "montiert", entweder wenn das Gerät an meinen PC angeschlossen war oder nicht. Und ich verglich den Zustand mit Environment.MEDIA_MOUNTED_READ_ONLY und Environment.MEDIA_MOUNTED ohne Erfolg. Mein Gerät befindet sich in keinem dieser Zustände.

Eine Sache, die Sie wissen müssen, ist, dass mein Telefon keine externe SD-Karte hat, da es eine interne ist. Dies führt dazu, dass mein Gerät ein Verzeichnis "/ storage/emulated/0/..." für den externen Speicher hat.

Ich muss auch darauf hinweisen, dass ich die folgenden Tags in meinem Android-Manifest umgesetzt haben:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/> 

Ich habe keine Ahnung, was passiert sein könnte. Eine andere Sache, die helfen könnte, ist, dass ich versucht habe, Dateien mit winrar (für Android) zu verwalten, und ich konnte Dateien mit dem Gerät, das mit meinem PC verbunden war, entfernen, ohne es verbunden zu haben. Also ich weiß nicht was ich machen soll.

Der Code, den ich verwende, um eine Datei zu schreiben, ist der folgende. Beachten Sie, dass es eine Bilddatei lesen sollte (was es tut), wandeln es in einen String, wandeln es wieder in ein Bild und dann speichern Sie es auf den Ordner Downloads:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg"); 
// Reading a Image file from file system 
FileInputStream imageInFile = new FileInputStream(file); 
byte imageData[] = new byte[(int) file.length()]; 
imageInFile.read(imageData); 

// Converting Image byte array into Base64 String 
String imageDataString = encodeImage(imageData); 

// Converting a Base64 String into Image byte array 
byte[] imageByteArray = decodeImage(imageDataString); 

File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg"); 

//Write a image byte array into file system 
FileOutputStream imageOutFile = new FileOutputStream(newFile); 

imageOutFile.write(imageByteArray); 

imageInFile.close(); 
imageOutFile.close(); 

Was soll ich tun?

+0

Sind Sie sicher, dass die Datei beendet wird, um darauf zu schreiben? – Raghunandan

+0

Ich erstelle eine neue Datei. Oder zumindest versuche ich es. Ich bekomme die Datei nicht gefunden Ausnahme beim Versuch, es zu erstellen und die EACCES (Berechtigung verweigert) Fehler. Das ist mein Hauptproblem hier. Mache ich etwas falsch? – blastervla

Antwort

4

Nur ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE zu android.permission.WRITE_EXTERNAL_STORAGE in Ihrem uses-permission beheben.

Ich habe dieses Problem, UPPERCASE in Erlaubnis ist nicht nützlich.

+1

Ich kann Ihnen möglicherweise nicht genug für Ihre Antwort danken. Das hat mich tagelang belästigt. Vielen vielen Dank!! – blastervla

3

FileOutputStream erstellt eine Datei NICHT automatisch, wenn sie nicht existiert.

Also, Sie müssen überprüfen und erstellen, wenn Ihre Datei nicht existiert.

if(!newFile.exists()) { 
    newFile.createNewFile(); 
} 

Hoffe diese Hilfe!

+0

Danke für Ihre schnelle Antwort. Ich habe es versucht, aber es wirft jetzt die folgende Ausnahme: "java.io.IOException: Öffnen fehlgeschlagen: EACCES (Berechtigung verweigert)", wenn ich die 'newFile.createNewFile();' Methode. Irgendwelche Ideen zu was könnte passieren? – blastervla

+1

Rufen Sie auch vor dem Aufruf von createFile() 'newFile.getParentFile(). Mkdirs() 'auf. Ps.s. Entschuldigung, wenn es falsch ist, gehe ich weg von der Spitze meines Kopfes :) – vedi0boy

+0

Ok gut Sie offenbar nicht Ihre App die richtigen Berechtigungen, kann ich sehen, wo in der Manifest, dass Sie die Berechtigungen hinzugefügt. Edit: Entfernte letzte Aussage, es war falsch. – vedi0boy

Verwandte Themen