tutorial traduccion peliculas friends app groovy

traduccion - Cómo copiar archivos en Groovy



groovy traduccion (7)

Necesito copiar un archivo en Groovy y vi algunas formas de lograrlo en la web:

1

new AntBuilder().copy( file:"$sourceFile.canonicalPath", tofile:"$destFile.canonicalPath")

2

command = ["sh", "-c", "cp src/*.txt dst/"] Runtime.getRuntime().exec((String[]) command.toArray())

3

destination.withDataOutputStream { os-> source.withDataInputStream { is-> os << is } }

4

import java.nio.file.Files import java.nio.file.Paths Files.copy(Paths.get(a), Paths.get(b))

La cuarta forma me parece más limpia ya que no estoy seguro de qué tan bueno es usar AntBuilder y lo pesado que es, vi a algunas personas informando problemas con el cambio de la versión de Groovy. La 2ª manera depende del sistema operativo, la 3ª podría no ser eficiente.

¿Hay algo en Groovy para copiar archivos como en la 4ª declaración o debería usar Java para ello?


Esta es la forma de usar guión groovy independiente de la plataforma. Si alguien tiene preguntas, por favor pregunte en los comentarios.

def file = new File("java/jcifs-1.3.18.jar") this.class.classLoader.rootLoader.addURL(file.toURI().toURL()) def auth_server = Class.forName("jcifs.smb.NtlmPasswordAuthentication").newInstance("domain", "username", "password") def auth_local = Class.forName("jcifs.smb.NtlmPasswordAuthentication").newInstance(null, "local_username", "local_password") def source_url = args[0] def dest_url = args[1] def auth = auth_server //prepare source file if(!source_url.startsWith("////")) { source_url = "////localhost//"+ source_url.substring(0, 1) + "/$" + source_url.substring(1, source_url.length()); auth = auth_local } source_url = "smb:"+source_url.replace("//","/"); println("Copying from Source -> " + source_url); println("Connecting to Source.."); def source = Class.forName("jcifs.smb.SmbFile").newInstance(source_url,auth) println(source.canRead()); // Reset the authentication to default auth = auth_server //prepare destination file if(!dest_url.startsWith("////")) { dest_url = "////localhost//"+ dest_url.substring(0, 1) + "/$" +dest_url.substring(2, dest_url.length()); auth = auth_local } def dest = null dest_url = "smb:"+dest_url.replace("//","/"); println("Copying To Destination-> " + dest_url); println("Connecting to Destination.."); dest = Class.forName("jcifs.smb.SmbFile").newInstance(dest_url,auth) println(dest.canWrite()); if (dest.exists()){ println("Destination folder already exists"); } source.copyTo(dest);


Estoy usando AntBuilder para tales tareas. Es simple, consistente, ''probado en combate'' y divertido.

El segundo enfoque es demasiado específico del sistema operativo (solo para Linux en su caso)

El tercero es de muy bajo nivel y consume más recursos. Es útil si necesita transformar el archivo en el camino: cambiar la codificación, por ejemplo

El 4to parece demasiado complicado para mí ... El paquete de NIO es relativamente nuevo en JDK.

Al final del día, iría por la primera opción. Allí puede pasar de la tarea copy a scp , sin volver a desarrollar el script casi desde cero


Para agregar al archivo existente:

def src = new File(''src.txt'') def dest = new File(''dest.txt'') dest << src.text

Para sobrescribir si el archivo existe:

def src = new File(''src.txt'') def dest = new File(''dest.txt'') dest.write(src.text)


Prefiero de esta manera:

def file = new File("old.file") def newFile = new File("new.file") Files.copy(file.toPath(), newFile.toPath())


Si es un archivo de texto, iría con:

def src = new File(''src.txt'') def dst = new File(''dst.txt'') dst << src.text


Si está haciendo esto en código, solo use algo como:

new File(''copy.bin'').bytes = new File(''orig.bin'').bytes

Si esto es por código relacionado con la construcción, esto también funcionaría, o usar el constructor Ant.

Tenga en cuenta que si está seguro de que los archivos son textuales, puede usar .text vez de .bytes .


Si tienes Java 7, definitivamente iría con

Path source = ... Path target = ... Files.copy(source, target)

Con la clase java.nio.file.Path , puede trabajar con enlaces simbólicos y duros. De java.nio.file.Files :

Esta clase consiste exclusivamente en métodos estáticos que operan en archivos, directorios u otros tipos de archivos. En la mayoría de los casos, los métodos definidos aquí se delegarán en el proveedor de sistema de archivos asociado para realizar las operaciones de archivo .

Solo como referencias:

Copie archivos de una carpeta a otra con Groovy

http://groovyconsole.appspot.com/view.groovy?id=8001

Mi segunda opción sería la tarea ant con AntBuilder .