java - 无法关闭输出流

标签 java oop

我无法编译该程序。问题出在最后一行“out.close”。请告诉我如何纠正它以及为什么会导致问题。

import java.io.*;

public class Test {

    public static void main(String args[]) throws IOException {
        try {
            BufferedReader in = new BufferedReader(new FileReader(args[0]));
            BufferedWriter out = new BufferedWriter(new FileWriter(args[1]));
            String line;
            line = in.readLine();
            while (line != null) {
                out.write(line, 0, line.length());
                out.newLine();
                line = in.readLine();
            }
        } finally {
            out.close();
        }
    }
}

最佳答案

你必须在try-finally block 之外声明BufferedWriter out变量,因为try block 中声明的变量超出了finally的范围,称为 block 作用域。代码应该是这样的:

BufferedWriter out = null;
try {
    BufferedReader in = new BufferedReader(new FileReader(args[0]));
    out = new BufferedWriter(new FileWriter(args[1]));
    String line;
    line = in.readLine();
    while (line != null) {
        out.write(line, 0, line.length());
        out.newLine();
        line = in.readLine();
    }
} finally {
    if (out != null)
        out.close();
}

或者正如评论中所说,如果Java版本是7或更高版本,则应该使用try-with-resources:

try(BufferedReader in = new BufferedReader(new FileReader(args[0]));
    BufferedWriter out = new BufferedWriter(new FileWriter(args[1]))) 
{
    String line;
    line = in.readLine();
    while (line != null) {
        out.write(line, 0, line.length());
        out.newLine();
        line = in.readLine();
    }
}

在这种情况下,您不需要在finally block 中手动关闭它。

关于java - 无法关闭输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700322/

相关文章:

java - 创建入侵检测系统输入的算法或 API

java - Java 中 getter 的命名约定有多重要?

java - 当使用 lambda 表达式而不是匿名内部类时,Spring 无法确定泛型类型

java - IoC 容器是单例还是静态的?

java - 复合对象如何与父对象通信?

java - 如何使地理定位 webview 始终询问权限?

oop - 为什么 Rust 不支持特征对象向上转换?

java - 这四个 Android 类包含的模式的名称是什么?

java - 如何使用抽象类并实现它们

java - 将多个映射序列到一个文件