无法使用 FileReader 和 BufferedReader 读取 Java 中的文本文件

Unable to read text file in Java using FileReader and BufferedReader

我想读取 java8 中的文本文件,但出现错误 "Type mismatch: cannot convert from FileReader to Reader"。如果我将 Reader class 更改为 FileReader 而不是我得到错误 "The constructor BufferedReader(FileReader) is undefined" 我的发言是

Reader fr = new FileReader("testfile.txt");
BufferedReader br =  new BufferedReader(fr);

请推荐

您可能正在导入 java.io.BufferedReader 和 java.io.Reader 以外的内容。

这个有效

package com.company;

import java.io.*;

public class Main {
        public static void main(String[] args) throws Exception {
            Reader fr = new FileReader("testfile.txt");
            BufferedReader br =  new BufferedReader(fr);
        }
}

请检查您的导入;

要确认您有一个名为 FileReader 的 class,只需在代码中使用完整的 class 名称:

java.io.Reader fr = new java.io.FileReader("testfile.txt");
java.io.BufferedReader br =  new java.io.BufferedReader(fr);

这将确保您使用特定的 class 而不是 yourPackage.FileReader class.

然后,因为只有FileReader似乎有问题,你可以清理一下:

import java.io.*

...

Reader fr = new java.io.FileReader("testfile.txt");
BufferedReader br =  new BufferedReader(fr);

仅指定 FileReader 全名。

注意:

使用Class.GetPackage,你应该找出你使用的是哪个class。

System.out.println(FileReader.class.getPackage());

解释:

JLS - 7.5. Import Declarations

The scope and shadowing of a type or member imported by these declarations is specified in §6.3 and §6.4.

6.4.1. Shadowing

A package declaration never shadows any other declaration.

A single-type-import declaration d in a compilation unit c of package p that imports a type named n shadows, throughout c, the declarations of:

  • any top level type named n declared in another compilation unit of p
  • any type named n imported by a type-import-on-demand declaration in c
  • any type named n imported by a static-import-on-demand declaration in c

例子

A
A.Run
A.Test
B
B.Test

在A.Run.java

System.out.println(Test.class.getPackage());

这是输出:

  • 没有导入:包 A
  • 没有导入 import B.* : 包 A
  • 没有导入 import B.Test:包 B