ho bisogno di utilizzare alcuni file nella mia app. Sono conservati nella cartella degli asset. Ho visto discussioni su SO, dove i file vengono copiati dalla cartella delle risorse, in/data/data/sulla memoria interna e quindi utilizzati. Ricevo il codice, ma quello che non ottengo è, qual è la necessità di copiare le risorse nella memoria interna? Se qualcuno ha esperienza con questo, aiuto!Android - Copiare i file dalla cartella di beni/dati/dati
risposta
Prova questo: (utilizzare tutti e tre il suo metodo di lavoro per me e assegnare percorso di destinazione in "topath" oggetto stringa)
String toPath = "/data/data/" + getPackageName(); // Your application path
private static boolean copyAssetFolder(AssetManager assetManager,
String fromAssetPath, String toPath) {
try {
String[] files = assetManager.list(fromAssetPath);
new File(toPath).mkdirs();
boolean res = true;
for (String file : files)
if (file.contains("."))
res &= copyAsset(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
else
res &= copyAssetFolder(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
return res;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private static boolean copyAsset(AssetManager assetManager,
String fromAssetPath, String toPath) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(fromAssetPath);
new File(toPath).createNewFile();
out = new FileOutputStream(toPath);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
private static 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);
}
}
Giusta idea, ma non dovresti scrivere a fondo la directory/data (dato che è soggetta a modifiche) ma piuttosto scoprirla tramite l'API appropriata in fase di runtime. –
Dipende dall'utente, mi è stata fornita una risposta per copiare la cartella delle risorse in qualche percorso ... e se hai letto nuovamente la domanda l'utente chiede "/ data/data" in modo chiaro. –
@LavekushAgrawal questo codice copierà a ' "/ dati/data /" + getPackageName()' ... questo non è esattamente '/ dati/data /'. – ben75
Penso che non è possibile modificare/modificare i dati nella cartella di asset in fase di esecuzione o dopo l'installazione dell'applicazione. Così spostiamo i file nella cartella interna, quindi iniziamo a lavorarci sopra.
Uno dei motivi che appena spuntato per me è quando si utilizza il codice esistente C/C++ con NDK che richiede un percorso di un file e non si desidera modificare il codice.
Per esempio, sto usando una libreria C esistente che ha bisogno di alcuni file di dati e l'unica interfaccia esistente è un po ' "carico (char * path)" la funzione.
forse c'è in realtà un metodo migliore, ma non ho ancora trovato alcuna.
public final String path = "/data/data/com.aliserver.shop/databases/";
public final String Name = "store_db";
public void _copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = MyContext.getAssets().open("store_db");
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
grazie :) mi ha salvato la giornata –
vedi [questa] (http://stackoverflow.com/questions/19218775/android-copy-assets-to-internal-storage) – user3355820
@ user3355820 ho capito come si possa copiare attivi nella memoria interna o archiviazione esterna. Ottengo entrambi sono possibili, per esempio, ecco alcuni esempi di codice per la copia di file da risorsa per la memoria interna - http://stackoverflow.com/questions/15574983/copy-directory-from-assets-to-local-directory. Quello che non capisco è, perché uno vorrebbe farlo. Qual è il significato della copia delle risorse nell'archiviazione interna/esterna. – superuser