- package javaapplication12;
- import java.io.*;
- class Test implements Serializable{ // słowo implements mówi: klasa TEST 'dziedziczy po interfejsie' Serializable
- // Jeżeli chcemy daną klasę zapisać do pliku, to musimy ją serializować - właśnie za pomocą tej klasy Serializable
- int pole;
- static int numer = 0;
- public Test(int n){ // Konstruktor dla klasy
- pole = n;
- numer++; // jako iż jest to zmienna statyczna, to w każdym obiekcie ta wartość się zwiększy - w tym pliku jest to pokazane gdzieś poniżej.
- }
- public void metoda(Test t){ // Publiczna metoda dla klasy
- t.pole = 25;
- }
- public void metoda(int x){ // Druga publiczna metoda, z przykładem działania polimorfizmu
- //...
- }
- public int getPole(){ // tak się tworzy właściwości dla zmiennych - czyli klasy, które zwracają wartość zmiennej (prywatnej w tym wypadku)
- return pole;
- }
- public void setPole(int _pole){ // Podobnie jak powyżej, tylko tutaj nie pobieramy, a przypisujemy wartość do zmiennej (prywatnej), dzięki temu mamy kontrolę
- // nad wartościami jakie przypisujemy do zmiennej
- pole = _pole;
- }
- public static int getNumer(){ // tutaj mamy statyczną właściwość (taka zmienna statyczna ma tą samą wartość dla KAŻDEGO obiektu jaki stworzymy)
- return numer;
- }
- @Override
- public String toString(){ // za pomocą atrybutu Override możemy przyciążyć daną już wcześniej zmienną (którą dziedziczymy niejawnie po klasie OBJECT)
- return "abc";
- }
- }
- class Test2 extends Test{ // słowo extends mówi: że klasa TEST2 'dziedziczy po klasie' TEST
- public Test2(){ // Konstruktor dla klasy TEST2
- super(10); // Który za pomocą słówka 'super' (odowłanie się do klasy bazowej - czyli TEST) robi instancję tej klasy
- super.metoda(4); // tutaj za pomocą słówka 'super' odwołujemy się do metody z klasy bazowej
- }
- }
- class Plik{ // kolejna klasa... która potrafi czytać słowo lub linię z pliku
- private FileReader pl; // zmienna do czytania pliku
- public Plik(FileReader pl){ // konstruktor.
- this.pl = pl;
- }
- public Plik(String nazwa){ // drugi konstruktor - tutaj ładujemy plik po jego nazwie (ścieżce), a powyżej po obiekcie 'pl'
- try {
- pl = new FileReader(nazwa);
- } catch (FileNotFoundException ex) {
- }
- }
- public String czytajLinie() throws IOException{ // jak nazwa mówi "czytaj linijkę" - operacje na plikach wymagają dodania "throws IOEXCEPTION"
- String linia = "";
- char znak = (char)pl.read(); // czytamy znak (każde wczytanie znaku przesuwa wskaźnik do przodu, więc za każdym razem wczytamy inny znak)
- // kiedy plik się skończy, to wystem zwróci wartość '-1'
- while(znak!=-1 && znak!='\n'){ // plik będzie czytany dopóki się nie skończy (czyli właśnie to -1), bądź dopóki nie będziemy mieli znaku końca linii (\n)
- linia+=znak;
- znak = (char)pl.read(); // tutaj czytamy kolejny znak
- }
- return linia;
- }
- public String czytajSlowo() throws IOException{ // podobnie jak z linijką, tylko tutaj czytamy słowo i warunkiem skończenia czytania jest...
- // albo koniec pliku, albo kiedy wczytany znak będzie znakiem białym (spacja, tab, enter, etc)
- String linia = "";
- char znak = (char)pl.read();
- while(znak!=-1 && !Character.isWhitespace(znak)){
- linia+=znak;
- znak = (char)pl.read();
- }
- return linia;
- }
- }
- public class JavaApplication12 { // główna klasa aplikacji
- public static void zapisDoPliku(String nazwa, Test t) throws IOException{ // tutaj zapisujemy do pliku za pomocą klasy ObjectOutputStream - czyli takiej, która zapisuje wartości obiektów do pliku
- ObjectOutputStream pl = null; // Poniżej mamy standardowy schemat ładowania takiegp pliku
- try{
- pl = new ObjectOutputStream(new FileOutputStream(nazwa, true));
- pl.writeObject(t); // Za pomocą tej metody możemy zapisać właśnie cały obiekt.
- } finally{
- if(pl!=null){
- pl.close();
- }
- }
- }
- public static void odczytZPliku(String nazwa) throws IOException, ClassNotFoundException{ // tutaj w drugą strone... czytamy teraz cały obiekt...
- ObjectInputStream pl = null;
- try{
- pl = new ObjectInputStream(new FileInputStream(nazwa));
- Test t = (Test)pl.readObject();
- System.out.println(t.getPole());
- t = (Test)pl.readObject();
- System.out.println(t.getPole());
- } finally{
- if(pl!=null){
- pl.close();
- }
- }
- }
- public static void main(String[] args) throws IOException, ClassNotFoundException {
- /*
- Test t = new Test(10);
- System.out.printf("%d %d\n", t.getPole(), Test.getNumer());
- Test t2 = new Test(100);
- System.out.printf("%d %d\n", t.getPole(), Test.getNumer());
- System.out.printf("%d %d\n", t2.getPole(), Test.getNumer());
- System.out.println(t.getPole());
- System.out.println(t2.getPole());
- t.metoda(t2);
- t2.setPole(99);
- System.out.println(t.getPole());
- System.out.println(t2.getPole());
- Plik p = new Plik("/home/michal/NetBeansProjects/JavaApplication12/src/javaapplication12/JavaApplication12.java");
- System.out.println(p.czytajLinie());
- System.out.println(p.czytajSlowo());
- System.out.println(p.czytajSlowo());
- */
- Test t = new Test(5);
- //System.out.println(t.toString());
- //zapisDoPliku("test.dat", t);
- odczytZPliku("test.dat");
- }
- }