Android – Kopiere die Assets in den internen Speicher

Schönen Tag!

Ich habe gerade angefangen, für Android zu entwickeln. In meiner App muss ich die Items in meinem Assets-Ordner in den internen Speicher kopieren.

  • Automatische Protokollierung von Android-Lifecycle-Ereignissen mit ActivityLifecycleCallbacks?
  • Android-Metadaten von manifesten Rückkehr null
  • So erstellen Sie einen App-Image-Ordner in Android-Galerie zu zeigen
  • Referenzieren einer Zeichenfolge in einer Zeichenfolge-Array-Ressource mit xml
  • Android Live Wallpaper für Leistung und Akku sparen?
  • So ändern Sie die Größe eines Switch Widget
  • Ich habe viel auf SO gesucht, also das, was es auf den externen Speicher kopiert. Wie kopiere ich Dateien von 'Assets' Ordner auf sdcard?

    Das ist es, was ich erreichen möchte: Ich habe ein Verzeichnis, das bereits im internen Speicher als X> Y> Z vorhanden ist. Ich brauche eine Datei, die auf Y und eine andere auf Z kopiert werden soll.

    Kann mir jemand mit einem Code-Snippet helfen? Ich habe wirklich keine Ahnung, wie es weiter geht.

    Entschuldigung für mein schlechtes Englisch.

    Danke vielmals.

  • Überprüfen Sie die Datei Existenz in Androids Assets Ordner?
  • Cordova Fehler mit Cordova-Android 6.2.0 - getFileResources ist keine Funktion
  • Versuchte alles, aber Android-Finish (); Tätigkeit funktioniert nicht
  • Programmieren Sie die Telefonnummer des Android-Telefons programmgesteuert
  • "BadParcelableException: ClassNotFoundException beim Unmarshalling <myclass>" bei der Verwendung von Parcel.read-Methode, die ein ClassLoader als Argument hat
  • Android MediaPlayer-Reset setzt die Benutzeroberfläche ein
  • 5 Solutions collect form web for “Android – Kopiere die Assets in den internen Speicher”

    Benutzen

    String out= Environment.getExternalStorageDirectory().getAbsolutePath() + "/X/Y/Z/" ; File outFile = new File(out, Filename); 

    Nach dem Bearbeiten in deinem Ref. Link Antwort.

      private void copyAssets() { AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(""); } catch (IOException e) { Log.e("tag", "Failed to get asset file list.", e); } for(String filename : files) { InputStream in = null; OutputStream out = null; try { in = assetManager.open(filename); String outDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/X/Y/Z/" ; File outFile = new File(outDir, filename); out = new FileOutputStream(outFile); copyFile(in, out); in.close(); in = null; out.flush(); out.close(); out = null; } catch(IOException e) { Log.e("tag", "Failed to copy asset file: " + filename, e); } } } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while((read = in.read(buffer)) != -1){ out.write(buffer, 0, read); } } 

    Hallo Leute, ich habe so etwas gemacht. Was erlaubt Ihnen, alle Verzeichnisstruktur zu kopieren, um von Android AssetManager zu kopieren 🙂

     public String copyDirorfileFromAssetManager(String arg_assetDir, String arg_destinationDir) throws IOException { File sd_path = Environment.getExternalStorageDirectory(); String dest_dir_path = sd_path + addLeadingSlash(arg_destinationDir); File dest_dir = new File(dest_dir_path); createDir(dest_dir); AssetManager asset_manager = getApplicationContext().getAssets(); String[] files = asset_manager.list(arg_assetDir); for (int i = 0; i < files.length; i++) { String abs_asset_file_path = addTrailingSlash(arg_assetDir) + files[i]; String sub_files[] = asset_manager.list(abs_asset_file_path); if (sub_files.length == 0) { // It is a file String dest_file_path = addTrailingSlash(dest_dir_path) + files[i]; copyAssetFile(abs_asset_file_path, dest_file_path); } else { // It is a sub directory copyDirorfileFromAssetManager(abs_asset_file_path, addTrailingSlash(arg_destinationDir) + files[i]); } } return dest_dir_path; } public void copyAssetFile(String assetFilePath, String destinationFilePath) throws IOException { InputStream in = getApplicationContext().getAssets().open(assetFilePath); OutputStream out = new FileOutputStream(destinationFilePath); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) out.write(buf, 0, len); in.close(); out.close(); } public String addTrailingSlash(String path) { if (path.charAt(path.length() - 1) != '/') { path += "/"; } return path; } public String addLeadingSlash(String path) { if (path.charAt(0) != '/') { path = "/" + path; } return path; } public void createDir(File dir) throws IOException { if (dir.exists()) { if (!dir.isDirectory()) { throw new IOException("Can't create directory, a file is in the way"); } } else { dir.mkdirs(); if (!dir.isDirectory()) { throw new IOException("Unable to create directory"); } } } 

    Versuchen Sie diesen unten Code

     private void copyAssets() { AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(""); } catch (IOException e) { Log.e("tag", "Failed to get asset file list.", e); } for(String filename : files) { InputStream in = null; OutputStream out = null; try { in = assetManager.open(filename); File outFile = new File(getExternalFilesDir(null), filename); out = new FileOutputStream(outFile); copyFile(in, out); in.close(); in = null; out.flush(); out.close(); out = null; } catch(IOException e) { Log.e("tag", "Failed to copy asset file: " + filename, e); } } } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while((read = in.read(buffer)) != -1){ out.write(buffer, 0, read); } } 
     public void addFilesToSystem(String sysName, String intFil, Context c){ //sysName is the name of the file we have in the android os //intFil is the name of the internal file file = new File(path, sysName + ".txt"); if(!file.exists()){ path.mkdirs(); try { AssetManager am = c.getAssets(); InputStream is = am.open(intFil); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); Toast t = Toast.makeText(c, "Making file: " + file.getName() + ". One time action", Toast.LENGTH_LONG); t.show(); //Update files for the user to use MediaScannerConnection.scanFile(c, new String[] {file.toString()}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { // TODO Auto-generated method stub } }); } catch (IOException e) { Toast t = Toast.makeText(c, "Error: " + e.toString() + ". One time action", Toast.LENGTH_LONG); t.show(); e.printStackTrace(); } } } 

    Um eine Datei hinzuzufügen, rufen Sie das addFilesToSystem auf ("this_file_is_in_the_public_system", "this_file_is_in_the_assets_folder", Kontext / dieser Kontext ist, wenn Sie nicht die Methode in der Aktivität /

    Ich hoffe es hilft

    Sie können dazu die Envrionment # getDataDirectory- Methode verwenden. Es gibt den Pfad des Datenverzeichnisses des internen Speicherplatzes. Dies ist in der Regel, wo alle app-bezogenen Daten gespeichert sind.

    Alternativ, wenn Sie im Stammverzeichnis speichern möchten, können Sie dazu die Methode Environment # getRootDirectory verwenden.

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.