在Java中将一个文本文件的内容复制到另一个文本文件

我试图将包含2-3个整数(例如:1 2 3)的一个文本文件(“1.txt”)的内容复制到另一个文本文件(“2.txt”)但是我收到以下错误在编译时

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

命令提示符:-

 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 

但是在检查代码时,我发现finally()块已正确关闭。

finally ,不是finally()

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

顺便说一下,你有一个无限循环:

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

您必须读取循环内的数据才能完成:

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

finally块中,您的frfw变量无法找到,因为它们是在try块的范围内声明的。 在外面声明它们:

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

现在,由于它们是使用null值初始化的,因此在关闭它们之前还必须进行null检查:

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

并且close方法都可以抛出必须处理的IOException

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

最后,由于您不希望有很多代码来关闭基本流,只需将其移动到处理Closeable的方法中(请注意, FileReaderFileWriter实现了此接口):

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

最后,您的代码应如下所示:

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

从Java 7开始,我们try-with-resources ,因此上面的代码可以重写为:

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

更有效的方式是……

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

这是一个编译错误

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

Finally块不应该有圆括号。

尝试:

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

检查这个javapractices你会得到更好的主意。 它将帮助你最终了解更多关于try catch的信息。

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

1.你的代码不正确> finally块如果没有,则前面没有括号。 2.parenthesis总是只在方法前面。 3.dear你的FileReader的范围和FileWrier对象在try块中结束,所以你将在finally块中得到另外一个错误,即fw not found和fr not found 4.“throws IOEXception”也提到了main函数的前面

 public class Copytextfronanothertextfile{ public static void main(String[] args) throws FileNotFoundException, IOException { FileReader fr = null; FileWriter fw = null; try{ fr = new FileReader("C:\\Users\\Muzzammil\\Desktop\\chinese.txt"); fw = new FileWriter("C:\\Users\\Muzzammil\\Desktop\\jago.txt"); int c; while((c = fr.read()) != -1){ fw.write(c); } }finally{ if (fr != null){ fr.close(); } if(fw != null){ fw.close(); } } } } 

试试这段代码:

 class CopyContentFromToText { public static void main(String args[]){ String fileInput = "C://Users//Adhiraj//Desktop//temp.txt"; String fileoutput = "C://Users//Adhiraj//Desktop//temp1.txt"; try { FileReader fr=new FileReader(fileInput); FileWriter fw=new FileWriter(fileoutput); int c; while((c=fr.read())!=-1) { fw.write(c); } fr.close(); fw.close(); } catch(IOException e) { System.out.println(e); } } }