Ich verwende den folgenden Code, um eine Datei von meinem Server herunterzuladen und sie dann in das Stammverzeichnis der SD-Karte zu schreiben. Alles funktioniert einwandfrei:
package com.downloader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Environment;
import android.util.Log;
public class Downloader {
public void DownloadFile(String fileURL, String fileName) {
try {
File root = Environment.getExternalStorageDirectory();
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File(root, fileName));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.close();
} catch (Exception e) {
Log.d("Downloader", e.getMessage());
}
}
}
Verwenden Environment.getExternalStorageDirectory();
bedeutet jedoch, dass die Datei immer in das Stammverzeichnis geschrieben wird /mnt/sdcard
. Ist es möglich, einen bestimmten Ordner anzugeben, in den die Datei geschrieben werden soll?
Beispielsweise: /mnt/sdcard/myapp/downloads
Antworten:
quelle
getExternalStorageDirectory()
war in API 29 veraltet.Berechtigung zum Android-Manifest hinzufügen
Fügen Sie diese WRITE_EXTERNAL_STORAGE-Berechtigung zu Ihrem Anwendungsmanifest hinzu.
Überprüfen Sie die Verfügbarkeit des externen Speichers
Sie sollten immer zuerst die Verfügbarkeit prüfen. Ein Ausschnitt aus der offiziellen Android-Dokumentation zum externen Speicher .
Verwenden Sie eine Schreibmaschine
Zu guter Letzt vergessen Sie das
FileOutputStream
und verwendenFileWriter
stattdessen ein. Weitere Informationen zu dieser Klasse finden Sie im FileWriter-Javadoc . Möglicherweise möchten Sie hier weitere Fehlerbehandlungen hinzufügen, um den Benutzer zu informieren.quelle
FileOutputStream
(nun, es werden die Alternativen nicht behandelt). Warum ist es besser,FileWriter
stattdessen das zu verwenden - ist es schneller / zuverlässiger / etwas anderes?FileWriter
bietet praktische Methoden zum direkten Schreiben von Strings, die auf einem nicht vorhanden sindFileOutputStream
. Wenn Sie keine Textdateien schreiben,FileWriter
ist dies keine große Hilfe. In der Tat, wenn Sie eine Bilddatei schreiben , kann es überhaupt nicht wirklich mit einem gemachtFileWriter
werden. Wenn Sie wirklich eine schöne API für Text wollen, wickeln Sie IhreFileOutputStream
in einePrintStream
und Sie haben alle die gleichen Methoden wieSystem.out
.Die Antwort finden Sie hier - http://mytechead.wordpress.com/2014/01/30/android-create-a-file-and-write-to-external-storage/
Es sagt,
und dann verwenden wir diesen Code, um tatsächlich in den externen Speicher zu schreiben:
Und das ist es. Wenn Sie jetzt Ihren Ordner / sdcard / your-dir-name / besuchen, wird eine Datei mit dem Namen - My-File-Name.txt mit dem im Code angegebenen Inhalt angezeigt.
PS: - Sie benötigen die folgende Erlaubnis -
quelle
/sdcard/
ist nicht immer die SD-Karte.Um eine Datei zum Herunterladen oder Musikordner in SDCard herunterzuladen
Und vergessen Sie nicht, diese Erlaubnis im Manifest hinzuzufügen
quelle