首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接列表未正确读取文件

链接列表未正确读取文件
EN

Stack Overflow用户
提问于 2012-03-07 01:03:57
回答 3查看 475关注 0票数 0

因此,基本上,我有一个链接列表类,它拥有读取文件所需的所有构造函数数据,然后将其转换为链接列表。但是,当它读取文件数据时,它不正确地添加了行和空格。我正在使用system.out.println进行检查,结果不正确。我不认为它是toString方法,因为我对它做了太多的修改,没有任何改变。这件事我需要帮助,因为我想不出来。谢谢!

文件信息(基本上所有数据都在单独的行上):

代码语言:javascript
复制
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

链接列表:

代码语言:javascript
复制
    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;
    }

    }

从文件中读取并创建链接列表方法:

代码语言:javascript
复制
    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();
    }

这里是输出的样子(仔细看,您可以看到问题):

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-07 01:46:32

你没有任何验证,没有任何日志记录。您至少应该创建方法:

代码语言:javascript
复制
public String readLine(BufferedReader br){
    String rl = br.readLine();
    if (rl.trim().length() > 2) {
        return rl;
    }else return readLine(br);
}

并把它当作:

代码语言:javascript
复制
...
     while(infile.ready())
        {
          String username = readLine(infile); // instead of String username = infile.readLine();

此外,使用这么长的构造函数参数也容易出错。

LinkedAccountList (字符串用户名、字符串密码、字符串电子邮件、字符串名称、字符串品种、字符串性别、字符串年龄、字符串状态、字符串业余爱好){

使用ony setX(String arg)方法。这是道法中常见的做法。

票数 0
EN

Stack Overflow用户

发布于 2012-03-07 01:18:11

为我工作。问题似乎在于您的file.txtWalkinglily之间有一个额外的换行符。再检查一下文件,确保没有文件。

票数 0
EN

Stack Overflow用户

发布于 2012-03-07 01:18:39

问题显然不在输出方面。toString()中的一个bug不会导致它产生那样的输出。

看起来,在每个记录之后,输入中有一个额外的空行。这导致您的read方法在循环的每一次迭代中都会增加一行。如果这是问题所在,修复方法是添加一个额外的readLine调用,以跳过空行。

另外,您对类名的选择尤其糟糕。LinkedAccountList类不表示任何内容的列表。它代表一个帐户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9594364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档