0
import java.io.*;

public class Streams {
    public static void main(String[] args) {
        File homedir = new File(System.getProperty("user.home"));
        File is = new File(homedir, "java/in.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        int value = 0;
        while ((value=br.read())!=-1) {
            char c = (char) value;
            System.out.println(c);
        }
    }
}

在编译上述程序时,我收到这样的错误

Streams.java 中的错误(第 7 行) BufferedReader br = new BufferedReader(new InputStreamReader(is)); ^^^^^^^^^^^^^^^^^^^^^^^^^

构造函数 InputStreamReader(File) 未定义


请帮我解决这个问题,我使用的是java1.7.0_51版本,OS linux Deepin

提前致谢

4

3 回答 3

3

你使用Java 7?

然后:

Files.newBufferedReader(Paths.get(System.getProperty("home.dir")
    .resolve("java/in.txt")), StandardCharsets.UTF_8);

你使用Java 7?完全放弃File。见Files, Paths, FileSystems, 等等 等等。

(编辑:并使用 try-with-resources 语句;有关更多详细信息,请参阅@JonSkeet 的答案)

于 2014-02-26T13:05:13.270 回答
2

是的,完全正确。查看文档InputStreamReader,您不会找到带File参数的构造函数。

相反,您应该构造 aFileInputStream从文件中读取,并将其传递InputStreamReader. 您还应该指定要使用的编码,否则它将使用平台默认编码。

另请注意:

  • 您应该使用 try-with-resources 语句自动关闭资源
  • 我不会命名一个File变量is——这听起来更像你期望它是一个InputStream.

例如:

File file = new File(homedir, "java/in.txt");
try (BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(file), StandardCharsets.UTF_8))) {
    int value = 0;
    while ((value = br.read()) != -1) {
        char c = (char) value;
        System.out.println(c);
    }
}

(或者Files按照 fge 的回答使用 API。)

于 2014-02-26T13:04:41.880 回答
1

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(is))); 它应该可以工作。

于 2014-02-26T13:03:58.613 回答