Java输入输出
我是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
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
- 确保正确处理到达输入文件末尾的操作
即使修复了,您仍然会遇到同样的问题。您只需打开文件一次,然后重复读取。您可以在每次循环迭代时重新加载文件。您应该在循环之前创建读卡器,然后在循环迭代中调用
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);