我是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中使用特定的东西。答案 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