• 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?

Cloud VPS
0 głosów
294 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 1,018 wizyt
0 głosów
0 odpowiedzi 461 wizyt
0 głosów
1 odpowiedź 718 wizyt
pytanie zadane 28 grudnia 2017 w Java przez Kabuuz Bywalec (2,820 p.)

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 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

Kursy INF.02 i INF.03
...