将数组写入文件

时间:2009-03-29 15:37:57

标签: java arrays file-io

我正在尝试在书中进行练习,要求将数组列表的内容写入文本文件,有人能给我一些关于我做错的反对完整解决方案的想法,我是否需要制作一个返回单个字符串然后写入的方法?

import java.util.ArrayList;
import java.io.FileWriter;
import java.util.Iterator;

/**
 * A class to maintain an arbitrarily long list of notes.
 * Notes are numbered for external reference by a human user.
 * In this version, note numbers start at 0.
 * 
 * @author David J. Barnes and Michael Kolling.
 * @version 2008.03.30
 */
public class Notebook {
    // Storage for an arbitrary number of notes.
    private ArrayList<String> notes;

    /**
     * Perform any initialization that is required for the
     * notebook.
     */
    public Notebook() {
        notes = new ArrayList<String>();
    }

    /**
     * Store a new note into the notebook.
     * @param note The note to be stored.
     */
    public void storeNote(String note) {
        notes.add(note);
    }

    /**
     * @return The number of notes currently in the notebook.
     */
    public int numberOfNotes() {
        return notes.size();
    }

    /**
     * Remove a note from the notebook if it exists.
     * @param noteNumber The number of the note to be removed.
     */
    public void removeNote(int noteNumber) {
        if(noteNumber < 0) {
            // This is not a valid note number, so do nothing.
        } else if(noteNumber < numberOfNotes()) {
            // This is a valid note number.
            notes.remove(noteNumber);
        } else {
            // This is not a valid note number, so do nothing.
        }
    }

    /**
     * List all notes in the notebook.
     */
    public void listNotes() {
        for(String note : notes) {
            System.out.println(note);
        }
    }

    /**
     * 
     */
    public void writeToFile() {
        try{
            FileWriter writer = new FileWriter("file.txt");

            for(String str : notes){
                writer.write(str.toString());
            }
        }
        catch(Exception e ){
            System.out.println("some error...");
        }
    }
}

编辑:我现在遇到的问题是,即使我使用writer.write('\n'),我也无法在新行上获取每个字符串,我意识到我忘记了writer.close();;)

5 个答案:

答案 0 :(得分:2)

我认为错误的事情:

  • 在字符串上调用toString()是纯粹的浪费
  • 作家永远不会关闭
  • 注释写在文件中,它们之间没有任何分隔符。该文件可能难以阅读。

答案 1 :(得分:1)

您想要查看完成时关闭FileWriter。否则,是什么迫使FileWriter 完成其操作?

答案 2 :(得分:1)

在字符串变量中获取系统换行属性。

String newline = System.getProperty(“line.separator”);

然后在文件写入模块中将换行符附加到每行的末尾。

writer.write(str.toString()+ newline);

答案 3 :(得分:1)

不会非常改变您的代码...

try{
    PrintWriter writer = new PrintWriter(new FileWriter("file.txt"));

    for(String str : notes){
        writer.println(str.toString());
    }

答案 4 :(得分:0)

你没有办法划分字符串,所以当你重读它们时,你不会知道一个字符串的结束位置和下一个字符串的开始位置。由于Java Strings是Unicode,因此很少有东西可以写入文件中,而这些东西在字符串中是不合法的。所以我建议做的是写一个表示字符串长度的int,然后写一个字符串,这样你就知道要阅读多少。相反,您可以考虑使用Java的序列化方法,只需将整个List序列化为一个文件。

但话说回来,我是一个数据库人员,对PreparedStatements和ResultSets感到最满意,所以我可能只是把它作为一个SQLite数据库。