Java 使用BufferedReader调用方法

Java 使用BufferedReader调用方法,java,class,methods,bufferedreader,Java,Class,Methods,Bufferedreader,所以我有这个方法来读取我的主类中的一个文件,它工作得非常好 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 = 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);
它告诉我一个错误,方法“reafile(String)”对于类型BufferedReader是未定义的

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

您的类和阅读器对象都称为
reader
。最好将类重命名为类似于
MyReader

由于此命名冲突,某些行的解释不正确。您需要的是
MyReader.readfile(文件),程序看到的是
BufferedReader.readfile(文件)
因为您在某处有一个
读取器
类型为
BufferedReader

的对象,所以您的
读取器
(对象)似乎不是
读取器
(类)类型,而是
BufferedReader
(另一类)类型。这就是你需要清理的。我建议您稍微重命名一下类/对象。就目前的情况来看,这有点混乱

假设您的“reader”对象在

String randString=reader.readfile(“file.txt”)

不是引用类“reader”,而是在代码中声明了一个名为“reader”的变量,类型为“BufferedReader”。

BufferedReader reader = new BufferedReader(new FileReader("file"));
应该是

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

您没有使用输入参数。

编辑:我意识到您的错误

读这篇文章,好好想想

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方法

类似这样的东西


然后你需要做的就是传入一个文件。一旦传入,您可能希望返回文件中的行?我可以帮助回答任何其他问题

一些会影响如何写这篇文章的问题。有多个文件吗?文件是否很长,以至于您不想将其存储在内存中?您是否会对同一个文件多次使用该方法?您是否使用Java 7?如果是,请使用
Files.readAllLines()
@fge将其放入何处?您需要将包含该函数的类导入到主类中。仍然会出现相同的错误“reafile(String)”未为类型BufferedReader定义。“如果这是你的错误。你没有像我说的那样调用readfile。检查主方法调用中的拼写你能再解释一下吗?我试图复制并粘贴你写下的代码,但它仍然给我那个错误。是的,问题是你试图读取的是字符串而不是文件。我将在一分钟内提出您需要做的事情。请稍候。您如何调用该方法以在其他类中使用?如果我想使该方法不作为主要方法,该怎么办?我试图使文件读取器位于main方法之外。
BufferedReader reader = new BufferedReader(new FileReader(file));
   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();
             }
    }