• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zczytywanie z pliku - ObjectInputStream - czemu jest problem?

Object Storage Arubacloud
0 głosów
122 wizyt
pytanie zadane 15 grudnia 2018 w Java przez Tom_Ja Dyskutant (7,970 p.)

To mój kod przepisany z BufferedReader na ObjectInputStream:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class OdczytajPlik2 {
    public static class TworzPlik {
        static double[][]tablica;
 
        public static void Czytaj() {
            String linia = "";
            try {
                FileInputStream fis = new FileInputStream("NowaTab2.txt");
                  ObjectInputStream bfr = new ObjectInputStream(fis);
                  linia = (String) bfr.readObject();
                   String[] liczbawierszy = (String[]) ((String) bfr.readObject()).split(" ");
                      int wiersz = Integer.parseInt(liczbawierszy[2]);
 
                       String[] liczbakolumn = (String[]) ((String) bfr.readObject()).split(" ");
                          int kol = Integer.parseInt(liczbakolumn[2]);
 
                         double tablica[][] = new double [wiersz][kol];
 
                         for (int x = 0; x<wiersz; x++) {
                                    String[] wyrazS = (String[]) ((String) bfr.readObject()).split(" ");
                                    for (int i = 0; i<tablica.length; i++) { 
 
                                        double wyrazD = Double.parseDouble(wyrazS[i]);
                                    tablica[x][i] = wyrazD;                    
 
                         }
}
                         double max = tablica[0][0];
                         double min = tablica[0][0];
                           for (int i = 0; i<tablica.length; i++) {
                               for (int j = 0; j<tablica[i].length; j++) {
                            System.out.print(tablica[i][j] + " ");
                            if (max < tablica[i][j]) {
                                max = tablica[i][j];
                            }
                            if (min > tablica[i][j]) {
                                min = tablica[i][j];
                            }
                               }
                               System.out.println(" ");
                           }
 
                           System.out.println("Maksymalna wartość tablicy: " + max);
                           System.out.println("Minimalna wartość tablicy: " + min);
 
            }
            catch (ClassNotFoundException | IOException e) {
                System.out.println("Ups, jest problem");
            }          
 
        }
 
        public static void main(String[] args){
                  Czytaj();
              }
 
}
}

Plik mam w formie:

Macierz

Liczba wierszy: 2

Liczba kolumn: 2

3.409151512972887 0.22054570085972447
4.049554444595676 6.816644995335207

A w konsoli wyświetla mi:

Ups, jest problem

Dlaczego? Co powinienem poprawić?

1 odpowiedź

+1 głos
odpowiedź 15 grudnia 2018 przez RafalS VIP (122,820 p.)

Bo nie od tego jest klasa ObjectInputStream, której pierwsze zdanie w dokumentacji mówi:

An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream.

Podpowiem ObjectOutputStream nie zapisuje w takiej formie jak Twój plik.

Nie wiem wgl skąd pomysł, żeby użyć tutaj tej klasy. Polecam wpisać w google "java read file" :P Jest masa sposobów jak to zrobić ja osobiście lubie:

Scanner scanner = new Scanner(new File("plik.txt"));

jesli chcemy od razu parsować dane do odpowiednich typów:

int i = scanner.nextInt();

Lub jesli chcesz po prostu zawartosc pliku w stringu to:

String fileContent = Files.readString(Paths.get("plik.txt"));

 

komentarz 16 grudnia 2018 przez Tom_Ja Dyskutant (7,970 p.)
Używam tego, bo mam takie polecenie, mam i chcę się tego nauczyć ;)

Używać Scannera i BufferedReader, FileReader i PrintWriter już umiem ;)
komentarz 16 grudnia 2018 przez RafalS VIP (122,820 p.)

To wygeneruj zawartość pliku przy pomocy 

ObjectOutputStream

Podobne pytania

+2 głosów
3 odpowiedzi 719 wizyt
0 głosów
0 odpowiedzi 297 wizyt
0 głosów
1 odpowiedź 602 wizyt
pytanie zadane 28 grudnia 2017 w Java przez Kabuuz Bywalec (2,820 p.)

92,563 zapytań

141,413 odpowiedzi

319,591 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...