Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java输入输出_Java_Loops_File Io - Fatal编程技术网

Java输入输出

Java输入输出,java,loops,file-io,Java,Loops,File Io,我是Java的新手。我在学校做了这个练习,创建了一个BasicIO类和Main类来读写文件 然而,我的代码只读取第一句话,并以无限循环打印它 BasicIO.java import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; public class BasicIO { BasicIO() { line = null; } pu

我是Java的新手。我在学校做了这个练习,创建了一个
BasicIO
类和
Main
类来读写文件

然而,我的代码只读取第一句话,并以无限循环打印它

BasicIO.java

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class BasicIO 
{

    BasicIO()
    {
        line = null;
    }

    public void readplzthx(String filename) throws IOException
    {
        FileReader f = null;
        BufferedReader rd = null;

        f = new FileReader(filename);
        rd = new BufferedReader(f);

        line = rd.readLine();   
        rd.close();
        f.close();
    }

    public void writeplzthx(String filename)
    {

    }
    //String fn;
    String line;
}
Main.java:

import java.io.File;
import java.io.IOException;

public class Main {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException
    {
        File f = new File("test.txt");
        BasicIO io = new BasicIO();
        //io.readplzthx(f.getAbsolutePath());
        //File f = new File(args[1]);
        io.readplzthx(f.getAbsolutePath());
        do
        {
        //  io.readplzthx(f.getAbsolutePath());
            System.out.println(io.line);
        } while (io.line != null);
    }   

}
三点提示:

  • readplzthx
    不应在每次调用该文件时重新打开该文件
  • 在循环内调用
    readplzthx
    ,以便在每次迭代中读取新行
  • 确保正确处理到达输入文件末尾的操作
这就是你的无限循环<代码>io.line在循环内不会更改


即使修复了,您仍然会遇到同样的问题。您只需打开文件一次,然后重复读取。

您可以在每次循环迭代时重新加载文件。您应该在循环之前创建读卡器,然后在循环迭代中调用
reader.readLine()
,这样io.line值就不总是第一行。

readplzthx
方法中,您打开文件,读取一行,然后关闭文件。这是第一个问题。这就是为什么你只收到一行

您正在将类的包私有成员
设置为从文件中读取的行。您的
do while
循环基于
io.line
不为空的条件。这永远是正确的。这就是为什么你处在一个无限循环中

下面是一些关于
BasicIO
类的提示:

  • 编写显式方法以打开和关闭文件/流
  • 编写一个状态检查方法,告诉您是在文件末尾,还是有更多内容要读取。您可以在
    while
    循环中使用此选项
  • 编写一个从当前打开的文件返回一行的方法;你可以在你的循环中使用这个
你现在需要做的就是把这三部分放在一起


祝你好运

出现问题的原因是打开文件,读取第一行,然后关闭它。您需要在调用readplzthx之间保持文件打开,并在调用完成后进行清理。

他的readplzthnx方法打开文件,读取一行,然后关闭文件。正因为如此,每次通过循环,他都会一次又一次地得到相同的第一行代码。看起来他好像注释掉了有问题的代码。真正的问题是readplzthnx方法总是从文件返回同一行(第一行)。好的,谢谢。我觉得我对教程的理解太多了,所以我让这个练习变得更加困难。他们说我必须在主课堂上打印输出。实际上,我首先应该在readplzthx()中打印内容
    do
    {
    //  io.readplzthx(f.getAbsolutePath());
        System.out.println(io.line);
    } while (io.line != null);