Como ninguno de los resultados obtenidos me daba la solución que quería exactamente, me decidí a crear mi propia solución cogiendo diferentes ejemplos de Internet.
Esta clase que os propongo tiene tres funciones:
- copyDirectory: Pasándole dos directorios, el de origen y destino, copia todos los ficheros del primero al segundo. Para ello usa la siguiente función. Ejemplo de uso:
copyDirectory(new File("directorio_origen"), new File("directorio_destino"));
- copyFile: Copia el archivo de origen en uno de destino. No es necesario que el archivo de destino exista ya que si no existe lo genera al vuelo. Ejemplo de uso:
copyFile(new File("archivo_origen"), new File("archivo_destino"));
- copyFindAndReplace: Esta última copia el archivo de origen en el lugar de destino, pero además busca sustituye el String indicado por el otro indicado en todos el fichero. Ejemplo de uso:
copyFindAndReplace(new File("archivo_origen"), new File("archivo_destino"), "StringABuscar", "StringParaSustituir");
/**
*
* @author www.nosolounix.com
*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
public class Copy{
public Copy() {
}
/**
* Copia todo el contenido de un directorio a otro directorio
* @param srcDir
* @param dstDir
* @throws IOException
*/
public void copyDirectory(File srcDir, File dstDir)
{
try{
if (srcDir.isDirectory()) {
if (!dstDir.exists()) {
dstDir.mkdir();
}
String[] children = srcDir.list();
for (int i=0; i
copyDirectory(new File(srcDir, children[i]),
new File(dstDir, children[i]));
}
} else {
copyFile(srcDir, dstDir);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
/**
* Copia un solo archivo
* @param s
* @param t
* @throws IOException
*/
public void copyFile(File s, File t)
{
try{
FileChannel in = (new FileInputStream(s)).getChannel();
FileChannel out = (new FileOutputStream(t)).getChannel();
in.transferTo(0, s.length(), out);
in.close();
out.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
/**
* Copia un archivo y busca y sustituye un String dado
* @param source_file
* @param destination_file
* @param toFind
* @param toReplace
* @throws IOException
*/
public void copyFindAndReplace(String source_file, String destination_file, String toFind, String toReplace)
{
String str;
try{
FileInputStream fis2 = new FileInputStream(source_file);
DataInputStream input = new DataInputStream (fis2);
FileOutputStream fos2 = new FileOutputStream(destination_file);
DataOutputStream output = new DataOutputStream (fos2);
while (null != ((str = input.readLine())))
{
String s2=toFind;
String s3=toReplace;
int x=0;
int y=0;
String result="";
while ((x=str.indexOf(s2, y))>-1) {
result+=str.substring(y,x);
result+=s3;
y=x+s2.length();
}
result+=str.substring(y);
str=result;
if(str.indexOf("'',") != -1){
continue;
}
else{
str=str+"\n";
output.writeBytes(str);
}
}
}
catch (IOException ioe)
{
System.err.println ("I/O Error - " + ioe);
}
}
}
Basada en esta clase.
Comments
8 Responses to “ Programación Java - Copiar archivos, directorios y sustituir strings en ficheros ”
Post a Comment | Enviar comentarios ( Atom )
Hola Si pudieras colocar algo de como dibujar arboles en java. Ejemplo insertar los datos que querramos y que estos lo podamos ver en un JFrame con sus respectivos nodos para luego hacerle al arbol un recorrido x.
28 de mayo de 2010, 18:04hay un error, no cierras el bucle for en donde copia todo el directorio
24 de noviembre de 2010, 20:09Evidentemente no me lo generó al vuelo :S
14 de julio de 2011, 23:25Copy.copyFile(archivoLiquidacionSeleccionado, new File("/srv/nikant/liquidacionProveedores/ar1.pdf"));
java.io.FileNotFoundException: /srv/nikant/liquidacionProveedores/ar1.pdf (No such file or directory)
Al probar con el método copyFile me arrojó la excepción de acceso denegado... como puedo solucionarlo?
31 de agosto de 2011, 10:07Si vas a copiar clases de otro lado al menos dale crédito a los que la crearon.... está clase está en otra página, completa y sin errores (de sintaxis al menos) >.>
7 de noviembre de 2011, 16:45http://www.forosdelweb.com/1638941-post41.html
Por si alguno tiene el mismo problema
Que chorro, ladrón... Encima mal robado...
17 de noviembre de 2011, 9:02http://www.forosdelweb.com/1638941-post41.html
Realmente no recuerdo en que web encontré la base para crear esta clase, y aunque las dos primeras funciones si que son iguales que la fuente que comentais, podreis ver que hay una nueva función que añade funcionalidad a la clase.
17 de noviembre de 2011, 18:01Por lo tanto, pido disculpas por la falta de referencias, pero pasó mucho tiempo desde que cree la clase hasta que escribí el post, de todas formas incluyo la referencia para que nadie más se sienta ofendido.
Saludos!
Excelente compañero, Gracias!
28 de mayo de 2013, 15:02Publicar un comentario
Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.