Zapisywanie i wczytywanie int'u

0

Witam,
mam zamiar nauczyć się zapisywania i wczytywania różnych danych z plików (np. txt). Napisałem kod, w którym jest zastosowane wczytywanie jak i również zapisywanie, a żeby było widać na panelu pojawia się kwadrat, który zmienia położenie w losowej kolejności. Chciałbym, żeby program zapamiętywał ostatnio wylosowaną daną "x". Niestety program wczytuje x jako 100 co jest prawidłowe bo tak mam określone w pliku www.txt, ale nie nadpisuje tej wartości. Oto kod:

import javax.swing.JFrame;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.IOException;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.*;

public class Zapis extends JFrame
{
    
    JButton losuj;
    
    JPanel panel;
    int x = 20;
    int y = 20;
    File file = new File("C:\\Users\\Wiesław\\Desktop\\www.txt");
public void Zapis()
{
    
    try{
        BufferedReader input = new BufferedReader(new FileReader(file));
        String line = input.readLine();
System.out.println(line);
x = Integer.parseInt(line);
System.out.println("number: " + x);


    }catch (FileNotFoundException ex) {

}
    catch (Exception e) {
        e.printStackTrace();
    }
    teraz teraz = new teraz();
    
    losuj = new JButton("Losuj");
    
    panel = new JPanel(); 
    losuj.addActionListener(new losujact());
    this.add(BorderLayout.CENTER, teraz);
    
    this.add(BorderLayout.WEST,losuj);
    
    
    
    this.setSize(300,300);
    this.setVisible(true);
    
}
    class losujact implements ActionListener
    {
        public void actionPerformed(ActionEvent zdarzenie)
        {
            x = (int)(100*Math.random());
            y = (int)(100*Math.random());
             repaint(); 
             try {
			ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("www.txt"));
                        os.writeObject(x);
                        os.close();
		} catch (IOException e) {			
			e.printStackTrace();
                        System.err.print("Błąd zapisu");
		}
        }
        
        
    }
    
    class teraz extends JPanel 
	{
		public void paint (Graphics o)
		{
			
			o.setColor(Color.white);
			o.fillRect(x,y,10,10);
                }
       }
    public static void main(String[] args) 
    {
        Zapis Zapis = new Zapis();
                Zapis.Zapis();
    }
    
    
}
0

Wygląda, że z innego pliku czytasz, a do innego piszesz.

0

Masz rację, czytałem z innego pliku, dzięki, ale to by było za proste :D Kolejny problem:

[][] sr java.lang.Integer [][][][]8 I valuexr java.lang.Number[][][] [][][] xp
java.lang.NumberFormatException: For input string: "[][] sr java.lang.Integer [][][][]8 I valuexr java.lang.Nuber[][][] [][][] xp "
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at zapis.Zapis.Zapis(Zapis.java:38)
at zapis.Zapis.main(Zapis.java:96)

A w samym pliku www.txt piękna liczba 100 zamienia się na coś takiego: ¬í sr java.lang.Integerâ ¤÷‡8 I valuexr java.lang.Number†¬•”ŕ‹ xp
O dziwo netbeans daje radę jeszcze to odczytać ale ponownie nie nadpisuje.

Zmiana wprowadzona w moim kodzie: ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("C:\Users\Wiesław\Desktop\www.txt"));

Wszystko odpalam przez netBeansa, bo niestety java na moim komputerze nie działa(nie uruchamia się).

Wcześniejszy błąd czytania z innego miejsca docelowego wynikał z tego, że w tej chwili piszę programy sieciowo z kolegą (Team Server w netBeansie)

0

Poprawka:
Jednak nie wczytuje już tego netBeans tylko korzysta z:
int x = 20;
int y = 20;

Zatem pięknego napisu: ¬í sr java.lang.Integerâ ¤÷‡8 I valuexr java.lang.Number†¬•”ŕ‹ xp L
nawet nie daje rady odczytać.

0

Piszesz obiekt, a czytasz liczbę. Zmień jedno albo drugie (nie oba jednocześnie) ;).

0

Dzięki, zrobiłem to obiektowo bo czytałem, że to rozwiązanie jest lepsze. Tylko w jaki sposób wczytany obiekt "x" zamienić na int tak, żeby z klasy wewnętrznej wpływał na zmienną klasy głównej? Do programu dodałem przycisk wczytaj i actionlistenera jako klasę wewnętrzną:

class wczytajact implements ActionListener
{
    public void actionPerformed(ActionEvent zdarzenie)
    {
       
        try{
            is = new ObjectInputStream(new FileInputStream("C:\\Users\\Wiesław\\Desktop\\test.ser"));
        Object liczbax = is.readObject();
        Object x = (Object) liczbax;
       
     is.close();
     System.out.print(x+"");      // zależy mi, żeby ten x wpływał na int x = 20;  i zamieniał go
        }catch (FileNotFoundException ex) {
    
    }
        catch (Exception e) {
            e.printStackTrace();
        }
       
        repaint();
        System.out.print(x+"");    // ten x jest to x główny i zawsze równa się int x = 20;
    }

W jaki sposób to zrobić? Pewnie jest to jakaś błahostka ale bez tego będę musiał zrobić to za pomocą pliku .txt a wolałbym nauczyć się operować na wczytanych obiektach.

0

Pewnie tak:

     is = new ObjectInputStream(new FileInputStream("C:\\Users\\Wiesław\\Desktop\\test.ser"));
     x = (Integer)(is.readObject());

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