如何在java中从二进制文件读取对象到ArrayList?

时间:2014-02-24 22:33:24

标签: java file arraylist binary

我是Java初学者。我必须在二进制文件中编写一些对象,而不是能够在文件末尾写下一个对象,在第二种情况下以时间顺序编写。 我的代码权限如下:

class Czas implements Serializable {
    private int rok;
    private int miesiac;
    private int dzien;
    private int godzina;
    private int minuta;

    public Czas(int rok, int miesiac, int dzien, int godzina, int minuta) {
        this.rok = rok;
        this.miesiac = miesiac;
        this.dzien = dzien;
        this.godzina = godzina;
        this.minuta = minuta;
    }

    public int getRok() {
        return rok;
    }

    public int getMiesiac() {
        return miesiac;
    }

    public int getDzien() {
        return dzien;
    }

    public int getGodzina() {
        return godzina;
    }

    public int getMinuta() {
        return minuta;
    }
    }

    class Pomiar implements Serializable /*,Comparable<Pomiar>*/ {
    private Czas czas;
    private double temperatura;

    public Pomiar (Czas czas, double temperatura) {
        this.czas = czas;
        this.temperatura = temperatura;
    }

    public void Zapisz(ObjectOutputStream fout) throws IOException{
        fout.writeObject(this);
    }

    public void ZapisChrono(ObjectOutputStream fout) throws IOException {

    }


    public String toString() {
        return "Temperatura: " + temperatura;
    }
    }




    public class AlgorytmyZ3V3 {

    public static void main(String[] args) {
         try (ObjectOutputStream fout =  new ObjectOutputStream(new FileOutputStream(
                  "BazaPomiarow.dat")))
         {

      Czas czas1 = new Czas(1988, 6, 15, 10, 18);
      Czas czas2 = new Czas(1980, 1, 28, 15, 20);
      Czas czas3 = new Czas(1980, 12, 9, 3, 4);
      Pomiar p1 = new Pomiar(czas1, 30);
      Pomiar p2 = new Pomiar(czas2, 20);
      Pomiar p3 = new Pomiar(czas3, 30);
      p1.Zapisz(fout);
      p2.Zapisz(fout);
      p3.Zapisz(fout);
         }

      catch (IOException e) {
            System.out.println("Błąd wejścia/wyjścia.");
        }
       try {
        ObjectInputStream fin = new ObjectInputStream(new          FileInputStream("BazaPomiarow.dat"));
            ArrayList<Pomiar> lista = new ArrayList();
        }
        catch(Exception e) {
            System.out.println("Wyjątek w czasie deserializacji: " + e);
        }
     }

 }

所以我可以使用方法Zapisz编写下一个对象,它将在文件末尾写入。但我对时间顺序有问题。我想从文件读取记录到ArrayList,然后对该列表进行排序,并添加具有特定索引的下一个对象,最后再将整个ArrayList写入文件。这就是我想要这样做的原因,这就是我需要知道如何从文件中读取这些对象并写入ArrayList的原因。也许这不是最好的方式,但这是学校的任务,我需要尽可能精确。

用波兰语写名字,但我认为这不是问题,因为我只需要知道如何在Java中使用特定的东西。

1 个答案:

答案 0 :(得分:0)

由于本教程显示http://www.tutorialspoint.com/java/java_serialization.htm要获取对象形式的序列化文件,需要打开文件并创建新的对象输入流

FileInputStream fileIn = new FileInputStream("/tmp/myclass.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
只要可以使用

,就可以阅读它们
e = (Employee) in.readObject();

和一个循环。至于比较和排序,请看这里How to use Comparator in Java to sort