Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo hacer una copia de un archivo en android?

En mi aplicación quiero guardar una copia de un archivo determinado con un nombre diferente (que obtengo del usuario)

¿Realmente necesito abrir el contenido del archivo y escribirlo en otro archivo?

¿Cuál es la mejor manera de hacerlo?

  • Programaticamente encuentre imágenes trémulas o fuera de foco
  • GridView onItemClickListener nunca se invoca
  • ¿Por qué SparseIntArray no implementa Map <Integer, Integer>?
  • Alternativa de openintents para simular sensores para Android
  • ¿Cómo desactivo mi diálogo de progreso después de cargar la vista web?
  • Android Frame by Frame Problema de animación en elementos en un CursorAdapter
  • Error de conexión de anuncios: EOF (nuevo en android)
  • Busquen una letra abreviatura de week day of a date en java
  • 6 Solutions collect form web for “Cómo hacer una copia de un archivo en android?”

    Para copiar un archivo y guardarlo en su ruta de destino, puede utilizar el método siguiente.

    public 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(); } } 

    Como alternativa, puede utilizar FileChannel para copiar un archivo. Puede ser más rápido que el método de copia de bytes al copiar un archivo grande. No puedes usarlo si tu archivo es mayor que 2 GB.

     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(); } 

    Estos funcionaron bien para mí

     public static void copyFileOrDirectory(String srcDir, String dstDir) { try { File src = new File(srcDir); File dst = new File(dstDir, src.getName()); if (src.isDirectory()) { String files[] = src.list(); int filesLength = files.length; for (int i = 0; i < filesLength; i++) { String src1 = (new File(src, files[i]).getPath()); String dst1 = dst.getPath(); copyFileOrDirectory(src1, dst1); } } else { copyFile(src, dst); } } catch (Exception e) { e.printStackTrace(); } } public static void copyFile(File sourceFile, File destFile) throws IOException { if (!destFile.getParentFile().exists()) destFile.getParentFile().mkdirs(); if (!destFile.exists()) { destFile.createNewFile(); } FileChannel source = null; FileChannel destination = null; try { source = new FileInputStream(sourceFile).getChannel(); destination = new FileOutputStream(destFile).getChannel(); destination.transferFrom(source, 0, source.size()); } finally { if (source != null) { source.close(); } if (destination != null) { destination.close(); } } } 

    Puede ser demasiado tarde para una respuesta, pero la forma más conveniente es usar

    FileUtils

    static void copyFile(File srcFile, File destFile)

    Por ejemplo esto es lo que hice

     private String copy(String original, int copyNumber){ String copy_path = path + "_copy" + copyNumber; try { FileUtils.copyFile(new File(path), new File(copy_path)); return copy_path; } catch (IOException e) { e.printStackTrace(); } return null; } 

    Aquí hay una solución que realmente cierra los flujos de entrada / salida si se produce un error durante la copia. Esta solución utiliza apache Commons IO IOUtils métodos para copiar y manejar el cierre de los arroyos.

      public void copyFile(File src, File dst) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(src); out = new FileOutputStream(dst); IOUtils.copy(in, out); } catch (IOException ioe) { Log.e(LOGTAG, "IOException occurred.", ioe); } finally { IOUtils.closeQuietly(out); IOUtils.closeQuietly(in); } } 

    Si tiene permiso de root, puede copiarlo usando el siguiente código:

     void copyFile_dd(){ try { Process su; su = Runtime.getRuntime().exec("su"); String cmd = "dd if=/mnt/sdcard/test.dat of=/mnt/sdcard/test1.dat \n"+ "exit\n"; su.getOutputStream().write(cmd.getBytes()); if ((su.waitFor() != 0)) { throw new SecurityException(); } } catch (Exception e) { e.printStackTrace(); //throw new SecurityException(); } } 

    O

     void copyFile_cat(){ try { Process su; su = Runtime.getRuntime().exec("su"); String cmd = "cat /mnt/sdcard/test.dat > /mnt/sdcard/test2.dat \n"+ "exit\n"; su.getOutputStream().write(cmd.getBytes()); if ((su.waitFor() != 0)) { throw new SecurityException(); } } catch (Exception e) { e.printStackTrace(); //throw new SecurityException(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.