如何编写和检索对象arraylist到文件?

时间:2013-03-22 15:32:09

标签: java object arraylist get add

我有一个对象arraylist,有人可以通过告诉我从文件中编写和检索对象的最有效方法来帮助我吗?

感谢。

我的尝试

 public static void LOLadd(String ab, String cd, int ef) throws IOException {
     MyShelf newS = new MyShelf();
     newS.Fbooks = ab;
     newS.Bbooks = cd;
     newS.Cbooks = ef;
     InfoList.add(newS);

         FileWriter fw;
                 fw = new FileWriter("UserInfo.out.txt");
             PrintWriter outt = new PrintWriter(eh);
                 for (int i = 0; i <InfoList.size(); i++)
                 {
                     String ax = InfoList.get(i).Fbooks;
                     String ay = InfoList.get(i).Bbooks;
                     int az = InfoList.get(i).Cbooks;
                     output.print(ax + " " + ay + " " + az);  //Output all the words to file // on the same line
                     output.println(""); //Make space
                 }
                 fw.close();
                 output.close();
}

我尝试检索文件。另外,在检索文件后,如何读取每列对象?例如,如果我有:::::小说,戏剧,戏剧---如何阅读,获取,替换,删除和添加值到戏剧栏?

public Object findUsername(String a) throws FileNotFoundException, IOException,     ClassNotFoundException  
{    
 ObjectInputStream sc = new ObjectInputStream(new FileInputStream("myShelf.out.txt"));

    //ArrayList<Object> List = new ArrayList<Object>();
    InfoList = null;
    Object  obj = (Object) sc.readObject();

    InfoList.add((UserInfo) obj);
    sc.close();

     for (int i=0; i <InfoList.size(); i++) {
          if (InfoList.get(i).user.equals(a)){
               return "something" + InfoList.get(i);
      }
   }
     return "doesn't exist"; 
 }

public static String lbooksMatching(String b)    {

    //Retrieve data from file
    //...

    for (int i=0; i<myShelf.size(); i++)       {
        if (myShelf.get(i).user.equals (b))   
        {
            return b;
        }
        else 
        {
            return "dfbgregd"; 
        }
   }
    return "dfgdfge"; 
}

public static String matching(String qp)    {
    for (int i=0; i<myShelf.size(); i++)       {
        if (myShelf.get(i).pass.equals (qp))   
        {
            return c;
        }
        else 
        {
            return "Begegne"; 
        }
   }
    return "Bdfge"; 
}

感谢!!!

2 个答案:

答案 0 :(得分:3)

您似乎希望序列化一个对象,并坚持将序列化的表单转换为某种存储(在本例中为文件)。

这里有两条重要的评论:

<强>序列化

内部java序列化

  • Java提供自动序列化,要求通过实现java.io.Serializable接口来标记对象。实现接口将类标记为“可以序列化”,Java然后在内部处理序列化。
  • 有关如何序列化/的代码示例,请参阅this post 将对象反序列化为/从字节开始。

这可能永远是持久化对象的理想方式,因为你无法控制格式(由java处理),它不是人类可读的,如果对象发生变化,你可以对版本问题进行版本控制。

编组到JSON或XML

  • 将对象强制转换为磁盘的更好方法是使用其他数据格式,如XML或JSON。
  • 可以找到有关如何将对象转换为JSON结构/从JSON结构转换的示例here

重要:我不会像你一样在代码中进行那种序列化,除非有很好的理由(我在这里没有看到)。它会很快变得混乱,并且在您的对象发生变化时会发生变化。我会选择更自动化的序列化方式。此外,当使用类似JSON / XML的格式时,您知道有大量的API可用于读取/写入该格式,因此您不再需要实现所有序列化/反序列化逻辑。

<强>持久性

由于各种原因(没有版本控制/并发问题/ .....),将序列化对象写入文件并不总是一个好主意。

更好的方法是使用数据库。如果它是一个分层数据库,请查看Hibernate或JPA,用很少的代码来保存对象。 如果它是像MongoDB这样的文档数据库,则可以保留JSON序列化表示。

在Java中将对象持久化到数据库有大量资源可用。我建议查看JPA,这是持久性和对象/关系映射的标准API。

答案 1 :(得分:0)

这是另一个基本示例,它将让您深入了解Arraylist,构造函数和将输出写入文件: 运行此项后,如果您使用IDE,请转到项目文件夹,您将在那里提交* .txt文件。

import java.io.*;
import java.util.List;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ListOfNumbers {

    private List<Integer> list;
    private static final int SIZE = 10;//whatever size you wish

    public ListOfNumbers () {
        list = new ArrayList<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++) {
            list.add(new Integer(i));
        }
    }

    public void writeList() {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter("ManOutFile.txt"));
            for (int i = 0; i < SIZE; i++) {
                out.println("Value at: " + i + " = " + list.get(i));
            }
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(ListOfNumbers.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            out.close();
        }
    }
public static void main(String[] args)
{
    ListOfNumbers lnum=new ListOfNumbers();
    lnum.writeList();
}
}