构造函数InputStreamReader(File)未定义

时间:2014-02-26 13:02:23

标签: java java-7 bufferedreader fileinputstream inputstreamreader

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)未定义

     

请帮我解决这个问题我正在使用java 1.7.0_51版本,OS linux Deepin

提前致谢

3 个答案:

答案 0 :(得分:3)

您使用Java 7吗?

然后:

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

您使用的是Java 7吗?完全删除File。请参阅FilesPathsFileSystems等等。

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

答案 1 :(得分:2)

是的,这是对的。查看documentation for InputStreamReader,您将找不到采用File参数的构造函数。

相反,您应该构造一个FileInputStream来从文件中读取,然后将 传递给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);
    }
}

(或根据fge的回答使用Files API。)

答案 2 :(得分:1)

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