gpt4 book ai didi

java - 这个 FileWriter 是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 05:36:09 25 4
gpt4 key购买 nike

这是一个代码:

import java.io.*;

public class FileCharCopier
{
public static void main(String args[]) throws IOException
{

File f1=new File("scjp.txt");
File f2=new File("scjpcopy.txt");

FileReader in=new FileReader(f1);
FileWriter out=new FileWriter(f2);

int c;

while((c=in.read())!=1)
{
out.write(c);
in.close();
out.flush();
out.close();


}
}
}

我在同一目录中同时拥有 scjp 和 scjpcopy.txt

但是当我运行这个程序时,我得到了这些错误:

java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at FileCharCopier.main(FileCharCopier.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

第18行指的是

out.write(c);

谁能改正错误?

最佳答案

基本上,您将在 while-loop 的第一次迭代中关闭输入和输出流。这意味着当您第二次尝试循环时,流将关闭并抛出异常。

相反,例如,您应该在使用完流后关闭它们。

public class FileCharCopier {

public static void main(String args[]) throws IOException {

File f1 = new File("scjp.txt");
File f2 = new File("scjpcopy.txt");

FileReader in = null;
FileWriter out = null;

try {

in = new FileReader(f1);
out = new FileWriter(f2);

int c;

while ((c = in.read()) != 1) {
out.write(c);
}

out.flush();

} finally {
try {
out.close();
} catch (Exception e) {
}
try {
in.close();
} catch (Exception e) {
}
}
}
}

这使用 try-finally block 来确保在存在循环或发生某些错误时尽最大努力关闭流。

现在,如果您有幸使用 Java 7,则可以改用 try-with-resources 语句,例如...

public class FileCharCopier {

public static void main(String args[]) throws IOException {

File f1 = new File("scjp.txt");
File f2 = new File("scjpcopy.txt");

try (FileReader in = new FileReader(f1); FileWriter out = new FileWriter(f2)) {

int c;

while ((c = in.read()) != 1) {
out.write(c);
}

out.flush();

} finally {
}
}
}

看看The try-with-resources statement了解更多详情

关于java - 这个 FileWriter 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com