我正在尝试在书中进行练习,要求将数组列表的内容写入文本文件,有人能给我一些关于我做错的反对完整解决方案的想法,我是否需要制作一个返回单个字符串然后写入的方法?
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();
;)
答案 0 :(得分:2)
我认为错误的事情:
答案 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数据库。