Ich habe versucht, den URI-Pfad für eine Asset-Datei abzurufen.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Wenn ich überprüfe, ob die Datei existiert, sehe ich, dass diese Datei nicht existiert
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
Kann mir jemand sagen, wie ich den absoluten Pfad für eine im Asset-Ordner vorhandene Datei erwähnen kann
file://android_asset/...
, wo...
ist der relative Pfad imassets/
Verzeichnis Ihres Projekts .file://android_asset/
, jedoch nicht fürUri
: github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1file:///
.new File("file:///android_asset/sounds/beep.mid");
, aber die Ergebnisdatei existiert nicht. Irgendwelche Ideen? PS-Datei befindet sich imassets/sounds/
Ordner.Die richtige URL lautet:
Dabei ist RELATIVEPATH der Pfad zu Ihrer Ressource relativ zum Assets-Ordner.
Beachten Sie die 3 / 's im Schema. Die Webansicht würde ohne die 3 keine meiner Assets laden. Ich habe 2 versucht, wie (zuvor) von CommonsWare kommentiert, und es würde nicht funktionieren. Dann schaute ich auf CommonsWares Quelle auf Github und bemerkte den zusätzlichen Schrägstrich.
Dieser Test wurde zwar nur mit dem 1.6 Android Emulator durchgeführt, aber ich bezweifle, dass er auf einem realen Gerät oder einer höheren Version anders ist.
BEARBEITEN: CommonsWare hat seine Antwort aktualisiert, um diese winzige Änderung widerzuspiegeln. Also habe ich das so bearbeitet, dass es mit seiner aktuellen Antwort immer noch Sinn macht.
quelle
String fileName = "file:///android_asset/file.csv";
System.out.println(new File(fileName).exists()); // prints false
File
, der eine Zeichenfolge akzeptiert, erwartet einen Pfad, keinen URI . Ich habe seit einigen Jahren nicht mehr für Android codiert und die Dinge haben sich möglicherweise geändert. Ich bin mir nicht sicher, ob Sie mit einer normalen Java-Dateiklasse auf den Ordner für eingebettete Assets zugreifen können. Ich scheine mich zu erinnern, dass Sie einen AssetManager verwenden müssen . Dateien im Assets-Ordner werden im schreibgeschützten, gebündelten APK auf dem Gerät abgelegt und komprimiert (APKs sind eigentlich Zip-Dateien), sodass mehr Arbeit erforderlich ist, um sie zurückzulesen. Versuchen Sie etwas wienew File(new URI(filename))
Bitte versuchen Sie, dass dieser Code gut funktioniert
quelle
Schließlich habe ich aus dieser Antwort in Kotlin einen Weg gefunden, den Pfad einer Datei zu ermitteln, die in Assets vorhanden ist . Hier kopieren wir die Assets-Datei in den Cache und rufen den Dateipfad aus dieser Cache-Datei ab.
Holen Sie sich den Pfad zur Datei wie folgt:
quelle
fileName
Verzeichnis habendir/file
. Es wird mit Pfad abstürzen, dercache/dir/file
nicht existiert. Ich denke auch, dass es besser ist, eine Überprüfungif(!it.exist)
innerhalb desalso
Blocks durchzuführen, dann wird die Datei nicht jedes Mal kopiert, selbst wenn sich die Datei bereits im Cache befindetif(!it.exist)
gibt einen Fehler ungelöste Referenz. irgendeine Lösung ?if(!it.exist)
sollte vorher setzenit.outputStream()
...Stellen Sie sicher, dass sich Ihr Assets-Ordner in der richtigen Position befindet.
quelle
sourceSets { main { assets.srcDirs = ['src/main/assets'] } }
Funktioniert für WebView, scheint aber zu scheitern
URL.openStream()
. Sie müssen also die Protokolle file: // unterscheiden und sie wie vorgeschlagen über AssetManager verarbeiten.quelle
Probieren Sie es aus, es funktioniert:
Wenn Sie eine Nullwertausnahme erhalten, versuchen Sie Folgendes (mit Klasse
TopBrandData
):quelle
quelle
Versuche dies :
Ich hatte es getan und es hat funktioniert
quelle
Ja, Sie können nicht von Ihrem Android-Telefon oder Emulator auf Ihren Laufwerksordner zugreifen, da Ihr Computer und Android zwei verschiedene Betriebssysteme sind. Ich würde mich für den Res-Ordner von Android entscheiden, da er über gute Methoden zur Ressourcenverwaltung verfügt. Bis und solange Sie keinen guten Grund haben, Ihre Datei in den Assets-Ordner zu legen. Stattdessen können Sie dies tun
quelle
Arbeitete für mich Versuchen Sie diesen Code
quelle