我在阅读.dat文件时遇到问题。 目前,我知道如何读取.dat / .txt文件,但这对我来说有点棘手。
所以我有一组这样的数据:
TEST.DAT
Sunday
Scuba Diving Classes
Mr.Jones
N/A
Yes
Sunday
Sailing
Mr. Jackson
N/A
Yes
Sunday
Generation Next
Ms.Steele
N/A
Yes
Monday
Helping Hands
Ms.Wafa
ANX0
No
我需要对此文件执行的操作是逐个记录文件记录,如果字符串 activityname .equals到活动名称(例如Scuba Diving Classes),则变量以 C 开头设置供查看。这是编码:
try{
BufferedReader reader = new BufferedReader(new FileReader("test.dat"));
int numberOfLines = readLines();
numberOfLines = numberOfLines / 6;
for(int i=0;i < numberOfLines; i++)
{
String CDay = reader.readLine();
String CActivityName = reader.readLine();
String CSupervisor = reader.readLine();
String CLocation = reader.readLine();
String CPaid = reader.readLine();
String nothing = reader.readLine();
if(CActivityName.equals(activityName))
{
txtDay.setText(CDay);
txtSupervisor.setText(CSupervisor);
txtLocation.setText(CLocation);
//If it Activity is paid, then it is shown as paid via radiobutton
if(CPaid.equals("Yes"))
{
radioYes.setSelected(rootPaneCheckingEnabled);
}
if(CPaid.equals("No"))
{
radioNo.setSelected(rootPaneCheckingEnabled);
}
}
else
{
reader.close();
}
}
}
catch(IOException e)
{
Logger.getLogger(AddActivity.class.getName()).log(Level.SEVERE, null, e);
}
}
我使用了numberoflines变量来浏览文件,但我的逻辑存在缺陷,我不知道如何通过这个
方法的当前状态和错误
目前,此方法仅读取第一个记录 Scuba Diving Classes ,并且当if条件为false时不会遍历整个文件。
帮助!
答案 0 :(得分:2)
目前,当if条件为false时,此方法...不会遍历整个文件。
要找出原因,请查看else
块:
else
{
reader.close();
}
这意味着您在阅读完文件之前关闭了BufferedReader
。您无需在else
块中放置任何内容。
答案 1 :(得分:1)
我看到JB Net评论帮助了你。通常,您应该关闭finally块中的IO变量(文件,数据或其他),如下所示:
InputStream is = null;
try{
//open streams, do work
}catch(...){
}finally{
//seperate try catch here to make sure it does not affect anything else, just close one resource per try catch
try{
if(is != null){
is.close()
}catch(Exception ...){
//one line log
}
}
在java 7中,您尝试使用资源但未尝试过:)