Je sais que cette question a déjà été traitée mais j'ai une méthode un peu plus élégante pour copier un répertoire d'actifs vers un fichier sur la carte SD. Elle ne nécessite pas de boucle "for" mais utilise des flux de fichiers et des canaux pour faire le travail.
(Note) Si vous utilisez un type de fichier compressé, APK, PDF, ... vous pouvez renommer l'extension du fichier avant de l'insérer dans le poste et le renommer une fois que vous l'avez copié sur la carte SD.)
AssetManager am = context.getAssets();
AssetFileDescriptor afd = null;
try {
afd = am.openFd( "MyFile.dat");
// Create new file to copy into.
File file = new File(Environment.getExternalStorageDirectory() + java.io.File.separator + "NewFile.dat");
file.createNewFile();
copyFdToFile(afd.getFileDescriptor(), file);
} catch (IOException e) {
e.printStackTrace();
}
Un moyen de copier un fichier sans avoir à le parcourir en boucle.
public static void copyFdToFile(FileDescriptor src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
0 votes
Vous cherchez ceci stackoverflow.com/questions/4447477/
2 votes
Avant de copier/coller l'une des (excellentes !) solutions ci-dessous, pensez à utiliser cette bibliothèque pour le faire en une seule ligne de code : stackoverflow.com/a/41970539/9648