Odczytywanie wartości z pliku i przypisanie do zmiennych.

0

Witam, mam problem z napisaniem metody która pozwoli odczytać zapisany plik binarny i informacje w nim zawarte przekaże do odpowiednich zmiennych.

Plik wygląda następująco:
pierwsza liczba - ilość punktów
kolejna liczba - wartość współrzędnej x
kolejna liczba - wartość współrzędnej y

zapisywanie do pliku wyglada tak:

public void actSaveFile() throws IOException {
		System.out.println("open");
		jfc = new JFileChooser();
		int wynik = jfc.showSaveDialog(this);
		if(wynik == JFileChooser.SAVE_DIALOG)
			return;
		//FileWriter fw = new FileWriter(jfc.getSelectedFile());
		File fe = jfc.getSelectedFile();
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fe));
		DataOutputStream fw = new DataOutputStream(bos);
		try {
			fw.writeInt(points.size());
			//fw.write("\t");
			for (int i = 0; i < points.size(); i++) {
				//fw.writeInt(points.get(i).x + "\t" + points.get(i).y + "\t");
				fw.writeInt(points.get(i).x);
				fw.writeInt(points.get(i).y);
			}
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			fw.close();
		}
	}

odczyt:

public void actLoadFile() throws IOException {
		System.out.println("fsdfsd");
		boolean d = true;
		int index, x ,y, i;
		jfc1 = new JFileChooser();
		int wynik = jfc1.showOpenDialog(jfc1);
		if(wynik != JFileChooser.OPEN_DIALOG) {
			return;
		}
		File fr = jfc1.getSelectedFile();
		
		//System.out.println(jfc1.getSelectedFile());
		BufferedInputStream buff = new BufferedInputStream(new FileInputStream(fr));
		DataInputStream br = new DataInputStream(buff);
		String s;
		System.out.println("fdsf");
		i = 0;
		try {
			while ((s = br.readLine()) != null) {
				index = br.readInt();
				System.out.println("index: " + index);
				//br.readChar();
				points.setSize(index);
				//for(int i = 0; i < index; i++) {
					x = br.readInt(); // TUTAJ DOSTAJĘ WYJĄTEK EOFException
					System.out.println("x: " + x);
					//br.readChar();
					y = br.readInt();
					System.out.println("y: " + y);
					//br.readChar();
					points.set(i, new Point(x, y));
				//} 
				d = false;
				i++;
				//s = br.readLine();
				//System.out.println(s);
			}			
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			System.out.println(points.size());
			br.close();
			rysujPunkty();
			d = false;
		}
		
	}

kod się kompiluje, ale wywala mi wyjątek EOFException, natomiast zmienna index otrzymuje dobrą wartość

liczę, że wszystko dokładnie wyjaśniłem, pozdrawiam!

0

Nie rozumiem Twojego pomysłu na odczytywanie, odczytujesz wiersz do zmiennej s, ale z tej zmiennej s nie korzystasz. Więc tracisz pierwszy odczytany wiersz.
Dlaczego nie korzystasz z serializacji, ObjectOutputStream i ObjectInputStream? Wtedy zapisanie to jedno polecenie writeObject(points); podobnie będzie z odczytem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1