Sal*_*man 7 java filereader filewriter
我试图将包含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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
命令提示符:-
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
Run Code Online (Sandbox Code Playgroud)
但是在检查代码时,我发现finally()块已正确关闭.
Lui*_*oza 28
它finally不是finally():
try {
//...
} catch(IOException e) {
//...
} finally {
//...
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你有一个无限循环:
int c=fr.read();
while(c!=-1) {
fw.write(c);
}
Run Code Online (Sandbox Code Playgroud)
您必须读取循环内的数据才能完成:
int c=fr.read();
while(c!=-1) {
fw.write(c);
c = fr.read();
}
Run Code Online (Sandbox Code Playgroud)
在finally块中,您fr和fw变量无法找到,因为它们是在try块的范围内声明的.在外面声明它们:
FileReader fr = null;
FileWriter fw = null;
try {
//...
Run Code Online (Sandbox Code Playgroud)
现在,由于它们是使用nullvalue 初始化的,因此null在关闭它们之前还必须进行检查:
finally {
if (fr != null) {
fr.close();
}
if (fw != null) {
fw.close();
}
}
Run Code Online (Sandbox Code Playgroud)
并且close两者都可以抛出的方法IOException也必须处理:
finally {
if (fr != null) {
try {
fr.close();
} catch(IOException e) {
//...
}
}
if (fw != null) {
try {
fw.close();
} catch(IOException e) {
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,由于您不希望有很多代码来关闭基本流,只需将其移动到一个处理a的方法中Closeable(注意两者FileReader并FileWriter实现此接口):
public static void close(Closeable stream) {
try {
if (stream != null) {
stream.close();
}
} catch(IOException e) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
最后,您的代码应如下所示:
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) {
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
从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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70944 次 |
| 最近记录: |