Saltar al contenido

Copiar el contenido de un archivo de texto a otro en Java

Puede darse el caso de que halles algún problema en tu código o trabajo, recuerda probar siempre en un entorno de testing antes subir el código al trabajo final.

Solución:

Es finallyno finally():

try 
    //...
 catch(IOException e) 
    //...
 finally 
    //...

Por cierto, tienes un bucle sin fin allí:

int c=fr.read();
while(c!=-1) 
    fw.write(c);

Debes leer los datos dentro del bucle para que termine:

int c=fr.read();
while(c!=-1) 
    fw.write(c);
    c = fr.read();

En el finally bloque, tu fr y fw las variables no se pueden encontrar ya que están declaradas en el ámbito de la try cuadra. Declararlos fuera:

FileReader fr = null;
FileWriter fw = null;
try {
    //...

Ahora, dado que se inicializan con null valor, también debe hacer un null comprobar antes de cerrarlos:

finally 
    if (fr != null) 
        fr.close();
    
    if (fw != null) 
        fw.close();
    

Y el close método en ambos puede lanzar IOException eso también hay que manejarlo:

finally 
    if (fr != null) 
        try 
            fr.close();
         catch(IOException e) 
            //...
        
    
    if (fw != null) 
        try 
            fw.close();
         catch(IOException e) 
            //...
        
    

Al final, dado que no desea tener mucho código para cerrar un flujo básico, simplemente muévalo a un método que maneje un Closeable (tenga en cuenta que ambos FileReader y FileWriter implementa esta interfaz):

public static void close(Closeable stream) 
    try 
        if (stream != null) 
            stream.close();
        
     catch(IOException e) 
        //...
    

Al final, su código debería verse así:

import java.io.*;
class FileDemo 
    public static void main(String args[]) 
        FileReader fr = null;
        FileWriter fw = null;
        try 
            fr = new FileReader("1.txt");
            fw = new FileWriter("2.txt");
            int c = fr.read();
            while(c!=-1) 
                fw.write(c);
                c = fr.read();
            
         catch(IOException e) 
            e.printStackTrace();
         finally 
            close(fr);
            close(fw);
        
    
    public static void close(Closeable stream) 
        try 
            if (stream != null) 
                stream.close();
            
         catch(IOException e) 
            //...
        
    

Desde Java 7, tenemos try-with-resourcespor lo que el código anterior podría reescribirse como:

import java.io.*;
class FileDemo 
    public static void main(String args[]) 
        //this will close the resources automatically
        //even if an exception rises
        try (FileReader fr = new FileReader("1.txt");
             FileWriter fw = new FileWriter("2.txt")) 
            int c = fr.read();
            while(c!=-1) 
                fw.write(c);
                c = fr.read();
            
         catch(IOException e) 
            e.printStackTrace();
        
    

La forma más eficiente es…

public class Main 

public static void main(String[] args) throws IOException 
    File dir = new File(".");

    String source = dir.getCanonicalPath() + File.separator + "Code.txt";
    String dest = dir.getCanonicalPath() + File.separator + "Dest.txt";

    File fin = new File(source);
    FileInputStream fis = new FileInputStream(fin);
    BufferedReader in = new BufferedReader(new InputStreamReader(fis));

    FileWriter fstream = new FileWriter(dest, true);
    BufferedWriter out = new BufferedWriter(fstream);

    String aLine = null;
    while ((aLine = in.readLine()) != null) 
        //Process each line and add output to Dest.txt file
        out.write(aLine);
        out.newLine();
    

    // do not forget to close the buffer reader
    in.close();

    // close buffer writer
    out.close();

 

Puedes añadir valor a nuestra información tributando tu veteranía en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *