读取从arraylist创建的文件

时间:2014-11-06 18:02:44

标签: java arraylist filereader filewriter

我写了一个代码来保存我的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

3 个答案:

答案 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);
}