Dans mon application, je souhaite enregistrer une copie d'un certain fichier avec un nom différent (que je reçois de l'utilisateur)
Ai-je vraiment besoin d'ouvrir le contenu du fichier et de l'écrire dans un autre fichier?
Quelle est la meilleure façon de le faire?
Réponses:
Pour copier un fichier et l'enregistrer dans votre chemin de destination, vous pouvez utiliser la méthode ci-dessous.
Sur l'API 19+, vous pouvez utiliser la gestion automatique des ressources Java:
la source
finally
.Vous pouvez également utiliser FileChannel pour copier un fichier. Elle peut être plus rapide que la méthode de copie d'octets lors de la copie d'un fichier volumineux. Vous ne pouvez pas l'utiliser si votre fichier est supérieur à 2 Go.
la source
java.io.FileNotFoundException: /sdcard/AppProj/IMG_20150626_214946.jpg: open failed: ENOENT (No such file or directory)
de l'FileOutputStream outStream = new FileOutputStream(dst);
étape. D'après le texte, je me rends compte que le fichier n'existe pas, alors je le vérifie et l'appelledst.mkdir();
si nécessaire, mais cela n'aide toujours pas. J'ai aussi essayé de vérifierdst.canWrite();
et il est revenufalse
. Cela peut-il être la source du problème? Et oui, je l'ai<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
.try ( FileInputStream inStream = new FileInputStream(src); FileOutputStream outStream = new FileOutputStream(dst) ) {
onProgressUpdate
, afin que je puisse l'afficher dans une ProgressBar? Dans la solution acceptée, je peux calculer la progression dans la boucle while, mais je ne vois pas comment le faire ici.Extension Kotlin pour cela
la source
contentResolver.openInputStream(uri)
.Celles-ci ont bien fonctionné pour moi
la source
C'est simple sur Android O (API 26), comme vous le voyez:
la source
Il est peut-être trop tard pour une réponse, mais le moyen le plus pratique est d'utiliser
FileUtils
destatic void copyFile(File srcFile, File destFile)
par exemple c'est ce que j'ai fait
»
»
la source
Beaucoup plus simple maintenant avec Kotlin:
true
oufalse
est pour écraser le fichier de destinationhttps://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/copy-to.html
la source
Voici une solution qui ferme réellement les flux d'entrée / sortie si une erreur se produit lors de la copie. Cette solution utilise les méthodes Apache Commons IO IOUtils pour la copie et la gestion de la fermeture des flux.
la source
à kotlin, juste:
la source