Witam, to mój pierwszy post, więc proszę o wyrozumiałość w razie jakichś nieścisłości, aczkolwiek chciałbym ich uniknąć. :-)
Na razie jestem na początku swojej drogi "zabawy" z Javą, więc proszę o w miarę nieskomplikowane sugestie, ale do konkretu.
Mam następujący problem - chcę zapisać tablicę piętnastoelementową do pliku dane.txt, po czym je odczytać grupowo - najpierw stożki, potem koła, punkty czy walce (posiadam klasy Punkt, Kolo, Stozek i Walec - czesc z nich od siebie wzajemnie dziedziczy).
Odczytem się jeszcze za bardzo nie zajmowałem, gdyż mam problemy z zapisem do pliku - mianowicie po uruchomieniu programu zapętla się on i powstaje gigantyczny plik dane.txt (kilkaset MB, a pewnie i tyle, ile by miejsca starczyło, gdybym nie przerwał tego procesu), w którym znajduje się wciąż jeden wpis (zawartość a[0]), a nie nawet cała tablica.
Moje pytanie - co mam zrobić, by program normalnie zapisał tablicę do pliku (i potem ją ewentualnie odczytał)?
Jeżeli są jakieś inne błędy w kodzie, to również byłbym wdzięczny za ich wskazanie.
import java.io.*;
import java.util.*;
public class Main implements Iterable
{
static ArrayList tab = new ArrayList();
int size = tab.size();
public Iterator iterator()
{
return new Iterator()
{
int position = 0;
public boolean hasNext()
{
return position < size;
}
public Object next()
{
return tab.get(position++).toString();
}
public void remove()
{
throw new UnsupportedOperationException();
}
};
}
public static void main(String args[])
throws IOException //Czy to potrzebne?
{
int wybor;
BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Wypełnij tablicę danymi figurami.");
Punkt punkt = new Punkt(Math.random(), Math.random());
Kolo kolo = new Kolo(Math.random());
Walec walec = new Walec(Math.random(), Math.random());
Stozek stozek = new Stozek(Math.random(), Math.random(), Math.random());
RandomAccessFile wyjscie = null;
try
{
wyjscie = new RandomAccessFile("dane.txt", "rw");
}
catch(FileNotFoundException e)
{
System.out.println("Nie znaleziono pliku.");
}
for (int i = 0; i < 15; i++)
{
System.out.println("Wybierz: 1 - punkt, 2 - koło, 3 - stożek, 4 - walec.");
String line = null;
try{
line = brIn.readLine();
}
catch(IOException e){
System.out.println("Błąd odczytu strumienia.");
return;
}
try{
wybor = Integer.parseInt(line);
}
catch(NumberFormatException e){
System.out.println("Wprowadzona wartość nie jest liczbą całkowitą.");
return;
}
switch(wybor)
{
case 1: {
tab.add(punkt);
}
break;
case 2: {
tab.add(kolo);
}
break;
case 3: {
tab.add(walec);
}
break;
case 4: {
tab.add(stozek);
}
break;
default: System.out.println("Nie ma figury o takim numerze."); break;
}
}
RandomAccessFile wejscie = null;
try
{
wejscie = new RandomAccessFile("dane.txt", "r");
}
catch(FileNotFoundException e)
{
System.out.println("Nie znaleziono pliku.");
}
//Właściwa treść zapisu.
String line = null;
int indeks = 0;
System.out.println("\nWyświetlenie tablicy.\n");
for(Object o: tab)
{
System.out.println("a[" + indeks + "] = " + o.toString());
indeks++;
try
{
while(o.toString() != null)
{
wyjscie.writeBytes(o.toString() + "\n");
}
wyjscie.close();
}
catch(IOException e)
{
System.out.println("Błąd wejścia/wyjścia.");
return;
}
}
}
}