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

时间:2017-12-01 08:13:09

标签: java bufferedreader filereader

我想在java8中读取文本文件,我收到错误"类型不匹配:无法从FileReader转换为Reader"。如果我将Reader类更改为FileReader而不是我得到错误"构造函数BufferedReader(FileReader)未定义" 我的陈述是

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

请建议

2 个答案:

答案 0 :(得分:1)

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

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

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

然后,因为只有FileReader似乎有问题,你可以清理它有点像:

import java.io.*

...

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

仅指定FileReader全名。

注:

使用Class.GetPackage,您应该找出您正在使用的课程。

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

说明:

JLS - 7.5. Import Declarations

  

这些声明导入的类型或成员的范围和阴影在§6.3§6.4中指定。

6.4.1. Shadowing

  

包声明永远不会影响任何其他声明。

     

在包p的编译单元c中的单一类型导入声明d,它导入一个名为n shadow的类型,在整个c中,声明为:

     
      
  • 在p
  • 的另一个编译单元中声明的名为n的任何顶级类型   
  • 由c
  • 中的type-import-on-demand声明导入的任何名为n的类型   
  • 由c
  • 中的static-import-on-demand声明导入的任何名为n的类型   

实施例

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

答案 1 :(得分:0)

您可能正在导入除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);
        }
}

请检查您的进口商品;

相关问题