我写了一个代码来保存我的ArrayList到一个文件,但是我需要再次读取这个文件,稍后重用同一个数组,但文件是以一种奇怪的方式写的,有什么方法我可以配置方式输出文件将被写入?对不起,如果问题很愚蠢,这是我的第一个程序。
保存ArrayList的代码:
try {
FileOutputStream fileOut = new FileOutputStream(
"src//ServerInfo.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(dataServer);
out.close();
fileOut.close();
}
catch (IOException i) {
i.printStackTrace();
}
读取文件的代码:
try {
File file = new File("src//ServerInfo.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
try {
String s;
while ((s = br.readLine()) != null) {
dataServer.add(s);
}
}
finally {
br.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
更改读取或写入代码是可以的,我只需要一种方法来读取我写的文件。
输出文件llok如下:
¬í sr java.util.ArrayListxÒ™Ça I sizexp w t admint admint booklet@booklet.comt
Administratorx
它看起来应该如何:(这也是我第一次在程序执行之前编写它的方式)
admin
admin
booklet@booklet.com
Administrator
答案 0 :(得分:1)
虽然您的阅读代码对于您想要的格式是合理的,但您正在以不同的格式编写文件。正如Dan Temple所指出的,对象流是一个biary流,它是Java默认序列化机制的一部分。除了对象的内容之外,序列化对象还将包括类类型和串行版本之类的内容。拥有字符串以外的对象会使输出更加复杂。
如果您想要列表的纯文本表示,请执行以下操作:
public void save(String fileName) throws FileNotFoundException {
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
for (String element : dataServer)
pw.println(element);
pw.close();
}
正如vefthym所提到的,这是Java - How Can I Write My ArrayList to a file, and Read (load) that file to the original ArrayList?答案的几乎逐字复制和粘贴。您可能想要添加自己的异常处理,就像阅读代码一样。
答案 1 :(得分:0)
尝试去每一行,并在出现任何问题时阅读
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
//AFTER READING
split the line, then loop through the parts of the line. then add the element into a list.
答案 2 :(得分:0)
问题在于您尝试将对象作为字符而不是“对象”进行读取。有一种使用ObjectInputStream从文件读取对象的简单方法(类似于ObjectOutputStream用于编写对象)。所以从文件中读取arraylist的代码就像是:
ArrayList<String> input = new ArrayList<String>();
try{
FileInputStream fin = new FileInputStream("src//ServerInfo.txt");
ObjectInputStream ois = new ObjectInputStream(fin);
input = (ArrayList) ois.readObject();
ois.close();
fin.close();
}
catch(Exception e){
e.getMessage();
}
for(int i=0;i<input.size();i++){
System.out.println(input.get(i);
}