Dobrý deň
Chcem spraviť program, ktorý bude obsahovať ArrayList, ktorý naplním dielami, a obsah tohto ArrayListu zapísať do súboru. Chcem tiež, aby bolo možné po spustení programu načítať údaje zo súboru.
Mám abstraktnú triedu Dielo, od ktorej je zdedených niekoľko tried.
Potom mám hlavnú triedu Kniznica s metódou main.
Ďalej mám triedu UlozenieDoArrayListu, v ktorej mám ArrayList typu Dielo, a do neho si ukladám inštancie jednotlivých diel - kniha, časopis atď. Toto sa deje už v konštruktore.
Mám tiež triedu Generator, ktorá má metódy na generovanie mien, názvov a obsahov kníh (a ďalších diel).
Problém je so zapisovaním a načítavaním zo súboru. Keď spustím hlavnú metódu v tr. Kniznica, a pozriem sa do súboru subor.txt, je tam vygenerovaný nejaký slovný reťazec a jeden zo žánrov, napr. slovo HOROR (žánre sú uložené v Enume, ale to nie je také podstatné).
Chcem to spraviť tak, aby mi obsah ArrayListu zapísalo do súboru, a potom, aby bolo možné ArrayList opäť naplniť položkami v súbore. A chcem aby mi do toho súboru generovalo toho toľko, koľko je uvedené v konštruktore triedy UlozenieDoArrayListu (je tam na to príkaz while).
PS - chyby sa pravdepodobne nachádzajú v metódach na zapisovanie a načítavanie.
Obrovská vďaka všetkým!
Zdrojáky:
Dielo
public abstract class Dielo {
private String nazov;
private Enum zaner;
private String jazyk;
private Date datumVydania;
private String vydavatelstvo;
private String popis;
public abstract Object getObsah();
public void Zapis(DataOutputStream os) throws IOException{
os.writeUTF(nazov);
os.writeUTF(zaner.toString());
os.writeUTF(jazyk);
os.writeUTF(datumVydania.toString());
os.writeUTF(vydavatelstvo);
os.writeUTF(popis);
}
public void Nacitaj(DataInputStream is) throws IOException{//public DataInputStream
String s = is.readUTF();
}
public final String dajVseobecnyPopis(){
return popis;
}
public String getNazov(){
return nazov;
}
public Enum getZaner(){
return zaner;
}
public String getJazyk(){
return jazyk;
}
public Date getDatum(){
return datumVydania;
}
public String getVydavatelstvo(){
return vydavatelstvo;
}
public void setNazov(String n){
nazov = n;
}
public void setZaner(Enum z){
zaner = z;
}
public void setJazyk(String j){
jazyk=j;
}
public void setDatum(Date d){
datumVydania = d;
}
public void setVydavatelstvo(String v){
vydavatelstvo = v;
}
@Override
public String toString() {
return super.toString();
}
}
UlozenieDoArrayListu
public class UlozenieDoArrayListu implements Serializable{
public Random rn = new Random();
public ArrayList<Dielo>list;
public UlozenieDoArrayListu(){
this.list = new ArrayList<Dielo>();
Generator g = new Generator();
int i = 0;
while(i<10){
String st = g.generujSlovo(8);
String nazov = st.substring(0,1).toUpperCase()+st.substring(1);
String autor = g.generujMenoPriezvisko();
String obsah = g.generujVetu();
String ed = g.generujSlovo(10);
String vyd = ed.substring(0,1).toUpperCase()+ed.substring(1);
AudioVideo av = new AudioVideo();//inst triedy AudioVideo
av.setNazov(nazov);
av.setDatum(new Date());
av.setVydavatelstvo(vyd);
av.setZaner(Zaner.HOROR);
Kniha kn = new Kniha();//inst triedy Kniha
kn.setJazyk("tibetsky");
kn.setAutor(autor);
kn.setObsah(obsah);
kn.setZaner(Zaner.SCIFI);
kn.setISBN(st.toUpperCase());
Publikacia pb = new Publikacia();//ins triedy Publikacia
pb.setNazov(nazov);
pb.setObsah(obsah);
pb.setVydavatelstvo(st);
pb.setDatum(new Date());
Casopis cas = new Casopis();//inst triedy Casopis
cas.setJazyk("tibetan");
cas.setNazov(st);
cas.setObsah(st);
cas.setVydavatelstvo(vyd);
list.add(av);//audiovideo
list.add(kn);//kniha
list.add(pb);//publikacia
list.add(cas);//casopis
i++;
}
}
Hlavná trieda
public class Kniznica implements Serializable {
public static void main(String[] args) {
UlozenieDoArrayListu uk = new UlozenieDoArrayListu();
DataOutputStream dos = null;
try {
dos = new DataOutputStream(new FileOutputStream("subor.txt"));
for (Dielo dielo : uk.list) {
dielo.Zapis(dos);
}
} catch (Exception ex) {
System.out.println("" + ex.getMessage());
}finally{
try{
if(dos!=null)
dos.close();
}catch(Exception ex){
System.out.println(""+ex.getMessage());
}
}
}
Pridávam ešte pár tried jednotlivých diel
AudioVideo
public class AudioVideo extends Dielo implements Serializable{
private String obsah;
public void setObsah(String o){
obsah = o;
}
@Override
public String getObsah() {
return obsah;
}
@Override
public void Zapis(DataOutputStream s) throws IOException{
super.Zapis(s);
s.writeUTF(obsah);
}
@Override
public void Nacitaj(DataInputStream is) throws IOException {
super.Nacitaj(is);
}
}
Casopis
public class Casopis extends Dielo implements Serializable{
private String obsah;
public String getObsah(){
return obsah;
}
public void setObsah(String o){
obsah = o;
}
public String toString(){
return super.toString() + " " + obsah;
}
@Override
public void Zapis(DataOutputStream s) throws IOException{
super.Zapis(s);
s.writeUTF(obsah);
}
}