Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Pulpit

[Java] Serializacja, obsługa plików

Rekomendowane odpowiedzi

Jeżeli mam zaimplementowaną listę:

lista<Integer, String> l_wej = new lista<Integer, String>(10);
lista<Integer, String> l_wyj = new lista<Integer, String>(10);

O strukturze <(Int) Klucz, (String) Wartosc> i zapisuję ją sobie do pliku:

fos = new FileOutputStream("lista.ser");
oos = new ObjectOutputStream(fos);
oos.writeObject(l_wej);
System.out.println("Zapisano!");

Nastepnie wczytuję do innego obiektu tego samego typu:

fis = new FileInputStream("lista.ser");
ois = new ObjectInputStream(fis);
l_wyj = (lista) ois.readObject();
if(l_wyj != null)
{
   System.out.println("Wczytano!");
}

To dlaczego gdy chcę wyszukac jakąś wartość w moim l_wyj nie znajduje żadnej :hmm: Może to nie działa w ten sposób, że zapisuje mi obiekt z wszystkimi wartościami etc. i wczytując kopiuje mi to do innego obiektu (tego samego typu) :hmm:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A zamykasz ty te stream-y po operacjach I/O? ( .close() ) Jeżeli nie zamkniesz, to dane z bufora mogą nie zostać zapisane do pliku.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A zamykasz ty te stream-y po operacjach I/O? ( .close() ) Jeżeli nie zamkniesz, to dane z bufora mogą nie zostać zapisane do pliku.

No jak zrobie

case 4:
                       fos = new FileOutputStream("lista.ser");
                       oos = new ObjectOutputStream(fos);
                       oos.writeObject(l_wej);
                       fos.close();
                       oos.close();
                       System.out.println("Zapisano!");
                       break;
                   case 5:
                       fis = new FileInputStream("lista.ser");
                       ois = new ObjectInputStream(fis);
                       l_wyj = (lista) ois.readObject();
                       fis.close();
                       oos.close();
                       if(l_wyj != null)
                       {
                           System.out.println("Wczytano!");
                       }
                       break;

To to nic nie zmienia

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak rozumiem masz gdzieś tam blok try/catch oraz ta twoja lista implementuje interfejs serializable? Zapisz cos do tego pliku I manualnie sprawdź czy jego rozmiar sie zwiekszył, czy faktycznie coś zapisuje.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak rozumiem masz gdzieś tam blok try/catch oraz ta twoja lista implementuje interfejs serializable? Zapisz cos do tego pliku I manualnie sprawdź czy jego rozmiar sie zwiekszył, czy faktycznie coś zapisuje.

Tak, zapisuje plik ma w sobie jakieś dziwne cxiągi dziwnych znaków. Tak to wszystko w try jest, a później przechwytywanie wyjatków (chociaż ich nie generuje)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hmm obawiam się że bez pełnego kodu to nie wiele mogę zrobić, wszystko wydaje sie ok.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

import lista.lista;
import java.util.Scanner;
import java.io.*;

public class Main
{
   public static void main(String[] args)
   {
       lista<Integer, String> l_wej = new lista<Integer, String>(10);
       lista<Integer, String> l_wyj = null;
       Scanner is = new Scanner(System.in);
       int choice, key;
       String value;

       FileInputStream fis = null;
       ObjectInputStream ois = null;
       FileOutputStream fos = null;
       ObjectOutputStream oos = null;

       try
       {
           while (true)
           {
               System.out.println("Co chcesz zrobic?");
               System.out.println("1 - dodaj element");
               System.out.println("2 - wyszukaj element");
               System.out.println("3 - usun element");
               System.out.println("4 - zapisz liste na dysk");
               System.out.println("5 - wczytaj liste z dysku");
               System.out.println("6 - wyszukaj element na wczytanej liscie");
               System.out.println("7 - zakoncz");
               choice = is.nextInt();
               switch (choice)
               {
                   case 1:
                       System.out.print("Podaj klucz: ");
                       key = is.nextInt();

                       System.out.print("Podaj wartosc: ");
                       value = is.next();

                       l_wej.add_value(key, value);
                       break;
                   case 2:
                       System.out.print("Podaj klucz: ");
                       key = is.nextInt();
                       l_wej.find_value(key);
                       break;
                   case 3:
                       System.out.print("Podaj klucz: ");
                        key = is.nextInt();
                       l_wej.remove_value(key);
                       break;
                   case 4:
                       fos = new FileOutputStream("lista.ser");
                       oos = new ObjectOutputStream(fos);
                       oos.writeObject(l_wej);
                       fos.close();
                       oos.close();
                       System.out.println("Zapisano!");
                       break;
                   case 5:
                       fis = new FileInputStream("lista.ser");
                       ois = new ObjectInputStream(fis);
                       l_wyj = (lista) ois.readObject();
                       fis.close();
                       oos.close();
                       if(l_wyj != null)
                       {
                           System.out.println("Wczytano!");
                       }
                       break;
                   case 6:
                       System.out.print("Podaj klucz: ");
                       key = is.nextInt();
                       l_wyj.find_value(key);
                       break;
                   default:
                       System.exit(0);
                       break;
               }
           }
       }
       catch (FileNotFoundException e)
       {
           System.out.println(e);
       }
       catch (IOException e)
       {
           System.out.println(e);
       }
       catch (ClassNotFoundException e)
       {
           System.out.println(e);
       }
       finally
       {
           try
           {
               if (oos != null)
               {
                   oos.close();
               }
           }
           catch (IOException e) {}

           try
           {
               if (fos != null)
               {
                   fos.close();
               }
           }
           catch (IOException e) {}

           try
           {
               if (ois != null)
               {
                   ois.close();
               }
           }
           catch (IOException e) {}

           try
           {
               if (fis != null)
               {
                   fis.close();
               }
           }
           catch (IOException e) {}
       }
   }
}

 

package element;
import java.io.*;

public class element<K, V> implements Serializable
{
   public element<K, V> next, prev;
   public K key;
   public V value;
}

 

package lista;
import java.io.Serializable;
import element.element;

public class lista<K, V> implements Serializable
{
   private element<K, V> current, head, tail;

   public lista(int i)
   {
   }

   public void add_value(K k, V v)
   {
       if (head == null)
       {
           head = new element<K, V>();
           head.key = k;
           head.value = v;

           head.next = head.prev = null;
           tail = head;
       }
       else
       {
           current = head;
           while (current != null)
           {
               if (current.key == k)
               {
                   System.out.println("Blad! Klucz juz istnieje");
                   break;
               }
               else
               {
                   current = current.next;
               }
           }
           if (current == null)
           {
               tail.next = new element<K, V>();

               tail.next.key = k;
               tail.next.value = v;

               tail.next.prev = tail;
               tail = tail.next;
           }
       }
   }

   public void find_value(K key)
   {
       current = head;
       while (current != null)
       {
           if (current.key == key)
           {
               System.out.println("Wyszukany element: " + current.value);
               break;
           }
           else
           {
               current = current.next;
           }
       }
       if (current == null)
       {
           System.out.println("Wyszukany element: brak (nie istnieje)");
       }
   }

   public void remove_value(K key)
   {
       current = head;
       while (head != null)
       {
           if (head.key == key)
           {
               System.out.println("Usunieto element: " + head.key + " - " + head.value);
               head = head.next;
               break;
           }
           else if (current.next != null && current.next.key == key)
           {
               System.out.println("Usuniety element: " + current.next.key + " - " + current.next.value);
               current.next = current.next.next;
               break;
           }
           else
           {
               if (current.next != null)
                   current = current.next;
               else
               {
                   System.out.println("Usuniety element: brak (klucz nie istnieje!)");
                   break;
               }
           }
       }
   }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Typy opakowujące należy porównywać za pomocą metody equals() a nie operatora ==. Winna jest linijka:

 

current.key == key

 

w metodzie find_value. Podobną sytuację będziesz miał w przypadku usuwania.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...