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 finally
no 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-resources
por 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.