因此,基本上,我有一个链接列表类,它拥有读取文件所需的所有构造函数数据,然后将其转换为链接列表。但是,当它读取文件数据时,它不正确地添加了行和空格。我正在使用system.out.println进行检查,结果不正确。我不认为它是toString方法,因为我对它做了太多的修改,没有任何改变。这件事我需要帮助,因为我想不出来。谢谢!
文件信息(基本上所有数据都在单独的行上):
tobi
tobi
tobi@hotmail.com
tobi
Mixed Breed
Male
3-4
Virginia
Walking
lily
lily
lily@hotmail.com
lily
Yorkshire Terrier
Female
3-4
Hawaii
Jumping
peppy
peppy
peppy@hotmail.com
peppy
Chihuahua
Male
7-8
Alaska
Sleeping
fluffy
fluffy
fluffy@hotmail.com
fluffy
MixedBreed
Female
3-4
Virginia
Walking
flower
flower
flower@hotmail.com
flower
Chihuahua
Female
7-8
Alaska
Sleeping链接列表:
import java.io.Serializable;
import java.util.*;
public class LinkedAccountList implements Serializable{
private String username;
private String password;
private String email;
private String name;
private String breed;
private String gender;
private String age;
private String state;
private String hobby;
public LinkedAccountList (String username, String password, String email, String name, String breed, String gender, String age, String state, String hobby){
this.username = username;
this.password = password;
this.email = email;
this.name = name;
this.breed = breed;
this.gender = gender;
this.age = age;
this.state = state;
this.hobby = hobby;
}
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
public String getEmail(){
return email;
}
public String getName(){
return name;
}
public String getBreed(){
return breed;
}
public String getGender(){
return gender;
}
public String getAge(){
return age;
}
public String getState(){
return state;
}
public String getHobby(){
return hobby;
}
@Override
public String toString() {
return "Username: "+username+"\nPassword: "+password+"\nEmail: "+email+"\nName: "+name+"\nBreed: "+breed+"\nGender: "+gender+"\nAge: "+age+"\nState: "+state+"\nHobby: "+hobby;
}
public void setUsername(String u){
username = u;
}
public void setPassword(String p){
password = p;
}
public void setEmail(String e){
email = e;
}
public void setName(String n){
name = n;
}
public void setBreed(String b){
breed = b;
}
public void setGender(String g){
gender = g;
}
public void setAge(String a){
age = a;
}
public void setState(String s){
state = s;
}
public void setHobby(String h){
hobby = h;
}
}从文件中读取并创建链接列表方法:
LinkedList<LinkedAccountList> account = new LinkedList<LinkedAccountList>();
try
{
read(account, "file.txt");
} catch (Exception e)
{
System.err.println(e.toString());
}
display(account);
}
public static void read(LinkedList<LinkedAccountList> account, String inputFileName) throws java.io.IOException
{
BufferedReader infile = new BufferedReader(new FileReader(inputFileName));
while(infile.ready())
{
String username = infile.readLine();
String password = infile.readLine();
String email = infile.readLine();
String name = infile.readLine();
String breed = infile.readLine();
String gender = infile.readLine();
String age = infile.readLine();
String state = infile.readLine();
String hobby = infile.readLine();
LinkedAccountList d = new LinkedAccountList(username, password, email, name, breed, gender, age, state, hobby);
account.add(d);
}
infile.close();
}这里是输出的样子(仔细看,您可以看到问题):
Username: tobi
Password: tobi
Email: tobi@hotmail.com
Name: tobi
Breed: Mixed Breed
Gender: Male
Age: 3-4
State: Virginia
Hobby: Walking
Username:
Password: lily
Email: lily
Name: lily@hotmail.com
Breed: lily
Gender: Yorkshire Terrier
Age: Female
State: 3-4
Hobby: Hawaii
Username: Jumping
Password: peppy
Email: peppy
Name: peppy@hotmail.com
Breed: peppy
Gender: Chihuahua
Age: Male
State: 7-8
Hobby: Alaska
Username: Sleeping
Password: fluffy
Email: fluffy
Name: fluffy@hotmail.com
Breed: fluffy
Gender: Mixed Breed
Age: Female
State: 3-4
Hobby: Virginia
Username: Walking
Password: flower
Email: flower
Name: flower@hotmail.com
Breed: flower
Gender: Chihuahua
Age: Female
State: 7-8
Hobby: Alaska
Username: Sleeping
Password: null
Email: null
Name: null
Breed: null
Gender: null
Age: null
State: null
Hobby: null发布于 2012-03-07 01:46:32
你没有任何验证,没有任何日志记录。您至少应该创建方法:
public String readLine(BufferedReader br){
String rl = br.readLine();
if (rl.trim().length() > 2) {
return rl;
}else return readLine(br);
}并把它当作:
...
while(infile.ready())
{
String username = readLine(infile); // instead of String username = infile.readLine();此外,使用这么长的构造函数参数也容易出错。
LinkedAccountList (字符串用户名、字符串密码、字符串电子邮件、字符串名称、字符串品种、字符串性别、字符串年龄、字符串状态、字符串业余爱好){
使用ony setX(String arg)方法。这是道法中常见的做法。
发布于 2012-03-07 01:18:11
为我工作。问题似乎在于您的file.txt在Walking和lily之间有一个额外的换行符。再检查一下文件,确保没有文件。
发布于 2012-03-07 01:18:39
问题显然不在输出方面。toString()中的一个bug不会导致它产生那样的输出。
看起来,在每个记录之后,输入中有一个额外的空行。这导致您的read方法在循环的每一次迭代中都会增加一行。如果这是问题所在,修复方法是添加一个额外的readLine调用,以跳过空行。
另外,您对类名的选择尤其糟糕。LinkedAccountList类不表示任何内容的列表。它代表一个帐户。
https://stackoverflow.com/questions/9594364
复制相似问题