webentwicklung-frage-antwort-db.com.de

Wie übergebe ich einen Dateipfad im Assets-Ordner an File (String path)?

Mögliches Duplikat:
Android - So ermitteln Sie den absoluten Pfad für eine bestimmte Datei aus Assets?

Ich versuche, eine Datei an die Klasse File (String path) zu übergeben. Gibt es eine Möglichkeit, den absoluten Pfad der Datei im Assets-Ordner zu finden und an File () zu übergeben? Ich habe es versucht file:///Android_asset/myfoldername/myfilename als Pfadzeichenfolge, aber es hat nicht funktioniert. Irgendeine Idee?

30
akd

AFAIK, Sie können aus einer Assets-Datei kein File erstellen, da diese in der apk gespeichert sind, dh es gibt keinen Pfad zu einem Assets-Ordner.

Sie können jedoch versuchen, dieses File mithilfe eines Puffers und des AssetManager (es bietet Zugriff auf die Rohdaten-Dateien einer Anwendung) zu erstellen.

Versuchen Sie etwas zu tun wie:

AssetManager am = getAssets();
InputStream inputStream = am.open("myfoldername/myfilename");
File file = createFileFromInputStream(inputStream);

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File(my_file_name);
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

   return null;
}

Lassen Sie mich über Ihren Fortschritt wissen.

55
yugidroid

Vermögenswerte bleiben in der apk erhalten, es sei denn, Sie packen sie aus. Dementsprechend gibt es keinen Pfad, den Sie in eine Datei einfügen können. Der Pfad, den Sie in Ihrer Frage angegeben haben, funktioniert mit/in einem WebView, aber ich denke, das ist ein Sonderfall für WebView.

Sie müssen die Datei entpacken oder direkt verwenden.

Wenn Sie einen Kontext haben, können Sie context.getAssets().open("myfoldername/myfilename"); verwenden, um einen InputStream für die Datei zu öffnen. Mit dem InputStream können Sie ihn direkt verwenden oder irgendwo ausschreiben (danach können Sie ihn mit File verwenden).

9
nEx.Software