web-dev-qa-db-fra.com

Copier le contenu d'un fichier texte à un autre In Java

J'essaie de copier le contenu d'un fichier texte ("1.txt") contenant 2-3 numéros d'intiqueger (ex: 1 2 3) dans un autre fichier texte ("2.txt") mais je reçois l'erreur suivante À la compilation

import Java.io.*;
class FileDemo {
    public static void main(String args[]) {
      try {
          FileReader fr=new FileReader("1.txt");
          FileWriter fw=new FileWriter("2.txt");
          int c=fr.read();
          while(c!=-1) {
            fw.write(c);
          }
      } catch(IOException e) {
          System.out.println(e);
      } finally() { 
          fr.close();
          fw.close();
      }
    }
}

Invite de commande: -

C:\Documents and Settings\Salman\Desktop>javac FileDemo.Java
FileDemo.Java:20: error: '{' expected
                finally()
                       ^
FileDemo.Java:20: error: illegal start of expression
                finally()
                        ^
FileDemo.Java:20: error: ';' expected
                finally()
                         ^
FileDemo.Java:27: error: reached end of file while parsing
}
 ^
4 errors

Mais lors de la vérification du code, je trouve que le bloc enfin () est correctement fermé.

7
Salman

C'est finally, pas finally():

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

Au fait, vous avez une boucle sans fin:

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

Vous devez lire les données à l'intérieur de la boucle afin de le laisser finir:

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

Dans le bloc finally, vos variables fr et fw ne peuvent pas être trouvées car elles sont déclarées dans la portée du bloc try. Déclarez-les à l'extérieur:

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

Maintenant, comme ils sont initialisés avec une valeur null, vous devez également faire une vérification null avant de les fermer:

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

Et la méthode close sur les deux peut lancer IOException qui doit également être manipulé:

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

En fin de compte, puisque vous ne voulez pas avoir beaucoup de code pour fermer un flux de base, déplacez-la simplement dans une méthode qui gère A Closeable (Notez que les deux FileReader et FileWriter implémente cette interface):

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

En fin de compte, votre code devrait ressembler à:

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) {
            //...
        }
    }
}

Depuis Java 7, nous avons try-with-resources, donc le code ci-dessus pourrait être réécrit comme suit:

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

Manière plus efficace, c'est ...

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

Un bloc Finally ne devrait pas avoir les parenthèses rondes.

Essayer:

import Java.io.*;
class FileDemo
{
    public static void main(String args[])
    {
        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(); // Add this line
            }
        }
        catch(IOException e)
        {
            System.out.println(e);
        }
        finally
        {   
            fr.close();
            fw.close();
        }

    }
}
0
Elist

Vérifiez ceci JavaPractices Vous obtiendrez une meilleure idée. Cela vous aidera à comprendre plus sur l'essayer de prendre enfin.

0
Dhruvil Thaker

C'est une erreur de compilation

public static void main(String args[])
    {
        try
        {
            FileReader fr=new FileReader("1.txt");
            FileWriter fw=new FileWriter("2.txt");
            int c=fr.read();
            while(c!=-1)
            {
                fw.write(c);
            }
        }
        catch(IOException e)
        {
            System.out.println(e);
        }
        finally // finally doesn't accept any arguments like catch
        {   
            fr.close();
            fw.close();
        }

    }
0
sanbhat