【问题标题】:The constructor InputStreamReader(File) is undefined构造函数 InputStreamReader(File) 未定义
【发布时间】:2014-02-26 13:02:22
【问题描述】:
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

提前致谢

【问题讨论】:

    标签: java java-7 bufferedreader fileinputstream inputstreamreader


    【解决方案1】:

    您使用 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 的答案)

    【讨论】:

      【解决方案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。)

      【讨论】:

      • @Selva:“我遇到错误”并没有告诉我们任何关于错误的什么。如果是因为编译器找不到StandardCharsets,那是因为你需要导入它(例如import java.nio.charset.StandardCharsets;。)
      • @JohnSkeet 帮我寻找解决方案
      • @Selva:如果你不说错误是什么,我该如何帮助你找到解决方案?
      • @JohnSkeet while import 'java.nio.charset.StandardCharsets;'它告诉这个包:无法解析导入 java.nio.charset.StandardCharsets
      • 先生,不,先生,我将只使用'javac -source 5 filename.java'来编译我的程序
      【解决方案3】:

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

      【讨论】:

      • 你还是有同样的异常?
      • 在编译你的方式时我得到 FileNotFound 和 IOexception 先生
      • 那是因为你设置了错误的路径。这是题外话。
      • FileNotFoundException 另有说法,我相信它。
      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多