我在JAVA中读取文件并根据用户规范,将数据转换为链接列表或树,但如何将数据保存到文件中(作为数据结构),以便下一步时间我读取数据,我没有额外的努力来解析文件。
答案 0 :(得分:0)
您可以将这样的数据保存到文件中,它不是链接列表,但有助于理解
//save persons
public void savePersons(){
try{
PersonsInfo p;
String line;
FileWriter fw= new FileWriter("input.txt");
PrintWriter pw= new PrintWriter(fw);
for (int i=0 ; i<persons.size();i++){
p =(PersonsInfo)persons.get(i);
line = p.getName() +","+ p.getAddress() +","+ p.getPhoneNum();
pw.println(line);
}
pw.flush();
pw.close();
fw.close();
} catch (IOException ioEx){
System.out.println(ioEx);
}
你可以检索这样的数据,你不需要每次都解析文件
public class AddressBook{
ArrayList<PersonsInfo> persons;
public AddressBook (){
persons = new ArrayList <PersonsInfo> ();
loadPersons();
}
//Load Person
public void loadPersons (){
String tokens[]=null;
String name,address,phoneNum;
try{
FileReader fr= new FileReader("input.txt");
BufferedReader br= new BufferedReader(fr);
String line=br.readLine();
while (line !=null)
{
tokens = line.split(",");
name=tokens[0];
address=tokens[1];
phoneNum=tokens[2];
PersonsInfo p = new PersonsInfo(name,address,phoneNum);
persons.add(p);
line = br.readLine();
}
br.close();
fr.close();
}catch (IOException ioEx) {
System.out.println(ioEx);
}
}
答案 1 :(得分:0)
这取决于您希望如何存储数据:
Serialization
(示例here)。 Java将分别在写/读操作期间处理存储/构造对象/结构。如果您想以人类可读的形式存储数据,那么您可以将数据转换为let {'1}}并将其存储为String格式。您可以使用杰克逊的json
类,例如:
ObjectMapper
ObjectMapper mapper = new ObjectMapper();
YourClass object = new YourClass();
FileOutputStream outputStream = new FileOutputStream("path_to_file");
outputStream.write(mapper.writeValueAsBytes(object));
答案 2 :(得分:0)
您可以使用serialization
这是一个非常容易使用的Java功能:
保存:
ObjectOutputStream oos = null;
try {
LinkedList<String> list = new LinkedList<>();
list.add("toto"); list.add("tata");
oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\..\\Doc\\list.ser"));
oos.writeObject(list);
} catch ... {
}finally (oos.close) ...{
}
当然,如果不是你将LinkedList
更改为你想要的任何内容
加载
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("C:\\Users\\..\\Doc\\list.ser"));
final LinkedList<String> list = (LinkedList<String>) ois.readObject();
System.out.println(list.toString()); //[toto,tata]
} catch ... {
}finally (ois.close) ...{
}
在写作时,你使用writeObject
并在阅读时使用readObject
+ casting
到好的类型(所以顺序很重要,如果你写一个List然后是字符串然后其他,你可以读List然后String然后其他)