Сохранение связанного списка в файл отдельными строками - PullRequest
0 голосов
/ 12 марта 2012

Я постараюсь сделать это как можно проще.В основном у меня есть связанный список данных, где каждый элемент находится на отдельной строке.Однако, когда я пытаюсь сохранить его в файл, все это просто связывается в одну длинную строку.Мне нужно сохранить его в файл в разных строках, потому что я должен продолжать читать и сохранять в этот файл несколько раз, а в способе чтения файла все должно быть в отдельных строках.Спасибо!

Код для сохранения связанного списка в файл:

        String file_name = "output.txt";
        try {

                FileWriter fstream = new FileWriter(file_name);
                BufferedWriter out = new BufferedWriter(fstream);

                ListIterator itr = account.listIterator();
                while (itr.hasNext()) {
                    Account element = (Account) itr.next();
                    out.write(element + "\n");
                }

                out.close();
                System.out.println("File created successfully.");

        } catch (Exception e) {
        }

Код для создания связанного списка:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
public class Main extends javax.swing.JFrame implements ActionListener{

public static String readLine(BufferedReader br) throws IOException {
    String rl = br.readLine();
    if (rl.trim().length() > 2){
        return rl;
    }else return readLine(br);
}

public static void main(String[] args) {

    LinkedList<Account> account = new LinkedList<Account>();

    try
    {
        read(account, "output.txt");
    } catch (Exception e)
    {
        System.err.println(e.toString());
    }
        display(account);
    }

    public static void read(LinkedList<Account> account, String inputFileName) throws java.io.IOException
    {
        BufferedReader infile = new BufferedReader(new FileReader(inputFileName));
        while(infile.ready())
        {

            String username = readLine(infile);
            String password = readLine(infile);
            String email = readLine(infile);
            String name = readLine(infile);
            String breed = readLine(infile);
            String gender = readLine(infile);
            String age = readLine(infile);
            String state = readLine(infile);
            String hobby = readLine(infile);

            Account a = new Account(username, password, email, name, breed, gender, age, state, hobby);
            account.add(a);
            a.showList();
        }
        infile.close();
    }

    public static void display(LinkedList<?> c)
    {
        for (Object e : c)
        {
            System.out.println(e);
        }
    }

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Используйте PrintWriter(String fileName).println(...). Избегайте буквального \n.

1 голос
/ 12 марта 2012

Вместо

out.write(element + "\n");

попробовать

out.write(element);
out.newLine();

Ссылаясь на метод javadoc newLine():

Написать разделитель строк. Строка разделителя строк определяется системное свойство line.separator, и не обязательно является единственным символ новой строки ('\ n').

Таким образом, \ n не всегда корректно для новой строки.

0 голосов
/ 12 марта 2012

После каждого Account, который вы записываете в файл, будет новая строка.

    Account element = (Account) itr.next();
    out.write(element + "\n");

Я подозреваю, что настоящая проблема заключается в методе Account.toString(). Учитывая то, как вы это читаете, вы должны убедиться, что после каждого поля объекта учетной записи есть новая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...