在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
块中,您的fr
和fw
变量无法找到,因为它们是在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
的方法中(请注意, FileReader
和FileWriter
实现了此接口):
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); } } }