【问题标题】:Calling a method with BufferedReader使用 BufferedReader 调用方法
【发布时间】:2014-03-13 15:57:42
【问题描述】:

所以我有这个方法可以在我的主类中读取文件,而且效果很好

reader = new BufferedReader(new FileReader("how.txt"));
    List<String> lines = new ArrayList<String>();
    String line = reader.readLine();
    while( line != null ){
        lines.add(line);
        line = reader.readLine();
    }
    //Choose a random one from the list
    Random r = new Random();
    String randString=lines.get(r.nextInt(lines.size()));
    System.out.println(randString);

现在,问题是,我需要在主类中多次使用这个方法,我想为这个方法创建一个类,这样我就不必为不同的文件复制和粘贴整个方法我想读书。我试图创建类:

public class reader {

public static String readfile (String file) throws IOException{
    BufferedReader reader = new BufferedReader(new FileReader("file"));
    List<String> lines = new ArrayList<String>();
    String line = reader.readLine();
    while( line != null ){
        lines.add(line);
        line = reader.readLine();
    }
    //Choose a random one from the list
    Random r = new Random();
    String randString=lines.get(r.nextInt(lines.size()));
    System.out.println(randString);

    return file;
}

}

但是当我像这样调用主类中的方法时:

String randString = reader.readfile("file.txt");

它给了我一个错误,说方法“reafile(String)”对于 BufferedReader 类型是未定义的。

那么我该如何解决这个问题?或者你如何在不同的类中创建方法并在主类中调用它? 谢谢:)

【问题讨论】:

  • 几个问题会影响如何写这个。是否有多个文件?文件是否很长,以至于您不想将它们存储在内存中?你会为同一个文件多次使用该方法吗?
  • 您使用的是 Java 7 吗?如果是,请使用Files.readAllLines()
  • @fge 我应该把它放在哪里?

标签: java class methods bufferedreader


【解决方案1】:

你的类你的读者对象都被称为reader。最好将您的课程重命名为 MyReader 之类的名称。 由于此命名冲突,某些行被错误解释。你想要的是MyReader.readfile(file);,而你的程序看到的是BufferedReader.readfile(file);,因为你在某处有一个reader类型的BufferedReader对象

【讨论】:

  • 您需要将包含该函数的类导入到您的主类中。
【解决方案2】:

似乎您的reader(对象)不是reader(类)类型,而是BufferedReader(另一个类)类型。这是你需要清理的。我建议你稍微重命名你的类/对象。就目前而言,这有点混乱。

【讨论】:

    【解决方案3】:

    大概是你的“读者”对象

    String randString = reader.readfile("file.txt");

    不是指您的类“阅读器”,而是您可能在代码中声明了一些变量,称为“阅读器”,类型为“BufferedReader”。

    【讨论】:

      【解决方案4】:

      线

      BufferedReader reader = new BufferedReader(new FileReader("file"));
      

      应该是

      BufferedReader reader = new BufferedReader(new FileReader(file));
      

      你没有使用输入参数。

      【讨论】:

        【解决方案5】:

        编辑:我意识到你的错误!!!

        阅读并思考。

        FileReader 是一个字符连接流,它连接到您的文本文件。您需要创建一个文件。除非您提示用户并将其提供给 FileReader 对象,否则字符串不会删除它。

        一个好的开始应该是这样的:

           import java.io.*;
            class ReadAFile { 
                public static void main(String[] args){
                    Scanner in = new Scanner(System.in);
                    System.out.println("ENTER FILE NAME");
                    String fileName = in.nextLine();
                    try{
        
                        File myFile = new File(fileName);
                        FileReader fileReader = new FileReader(myFile);
                        BufferedReader reader = new BufferedReader(fileReader); 
                        /* WE CHAINED THE FileReader to a BufferedReader;*/
                        //additional operations
                     }catch(exception ex){
                         ex.printStackTrace();
                     }
            }
        

        如果您愿意,您可以将所有这些都放在其他类中。只要确保您将班级名称大写。我会用不同的名字来命名它以避免混淆。也许尝试 LoadFile 并在其中创建一个 loadFile 方法。

        类似的东西

        那么你需要做的就是传入一个文件。一旦传入,您可能想要返回文件中的行?我可以帮助解决任何其他问题

        【讨论】:

        • 仍然给出相同的错误“未定义 BufferedReader 类型的 reafile(String)”。”
        • 如果这是您的错误。当我放下时,您没有调用 readfile 。在你的 main 方法调用中检查你的拼写
        • 你能再解释一下吗?我试图复制并粘贴您输入的代码,但它仍然给我这个错误。
        • 是的,问题是您正在尝试读取字符串而不是文件。我会在一分钟内提出你需要做的事情。等等。
        • 如何调用该方法以在不同的类中使用?如果我想让该方法不作为主要方法怎么办?我正在尝试在 main 方法之外制作文件阅读器。
        猜你喜欢
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-28
        • 1970-01-01
        • 2015-10-27
        • 2013-10-27
        相关资源
        最近更新 更多