Как создать копию файла в Android?
В моем приложении я хочу сохранить копию определенного файла с другим именем (которое я получаю от пользователя)
Мне действительно нужно открывать содержимое файла и записывать его в другой файл?
Как лучше всего это сделать?
Переведено автоматически
Ответ 1
Чтобы скопировать файл и сохранить его по целевому пути, вы можете использовать приведенный ниже метод.
public static void copy(File src, File dst) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dst); try { // Transfer bytes from in to out byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } finally { out.close(); } } finally { in.close(); }}
В API 19+ вы можете использовать автоматическое управление ресурсами Java:
public static void copy(File src, File dst) throws IOException { try (InputStream in = new FileInputStream(src)) { try (OutputStream out = new FileOutputStream(dst)) { // Transfer bytes from in to out byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } }}
Ответ 2
В качестве альтернативы вы можете использовать FileChannel для копирования файла. Это может быть быстрее, чем метод байтового копирования при копировании большого файла. Однако вы не сможете его использовать, если размер вашего файла превышает 2 ГБ.
public void copy(File src, File dst) throws IOException { FileInputStream inStream = new FileInputStream(src); FileOutputStream outStream = new FileOutputStream(dst); FileChannel inChannel = inStream.getChannel(); FileChannel outChannel = outStream.getChannel(); inChannel.transferTo(0, inChannel.size(), outChannel); inStream.close(); outStream.close();}
Ответ 3
Расширение Kotlin для этого
fun File.copyTo(file: File) { inputStream().use { input -> file.outputStream().use { output -> input.copyTo(output) } }}
Ответ 4
Как вы видите, в Android O (API 26) это просто:
@RequiresApi(api = Build.VERSION_CODES.O) public static void copy(File origin, File dest) throws IOException { Files.copy(origin.toPath(), dest.toPath()); }