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

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

        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);
        }
    }
0
George KingoftheZombies Speach 12 Мар 2012 в 15:49

3 ответа

Лучший ответ

Вместо,

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

Пытаться

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

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

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

Итак, \ n не всегда кажется правильным для новой строки.

2
Santosh 12 Мар 2012 в 12:14

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

1
mgaert 12 Мар 2012 в 12:11

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

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

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

0
Stephen C 12 Мар 2012 в 12:10