Pobranie danych z pliku i zapis w tablicy

0

Nie mam pomysłu jak rozwiązać problem z wczytaniem danych z pliku do HashMap. Plik ma rozszerzenie txt.gz, więc rozpakowuję go tak:

in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));

Plik ma taką strukturę, że 1 i 2 linijka to inta reszta to int i ileś tam double i chciałbym te double własnie wpakować jako valuedo HashMapy, gdzie key to ten int z początku linijki.
Przykład tego pliku :

10
20 
0 1.1 2.4 0.567566 ....
1 0.565656 7.89989 ...
...

Będę wdzięczny za pomoc

0

A z czym masz problem? Może zacznij od wypisania tych wartości na konsolę, później się będziesz przejmować hashmapą.

0

Problem mam nawet z pętlą, bo jak próbowałem tak:

try {
                in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));
                numberOfBalls = Integer.parseInt(in.lines().skip(0).findFirst().get());
                numberOfParts = (int) in.lines().count() - 2;
                    try {
                        Scanner sc = new Scanner(in);
                        int line = 0, i = 0;
                        while (sc.hasNextLine()) {
                            if(line > 1) {
                                positions.put(i, new ArrayList<>());
                                while(sc.hasNextDouble()) {
                                    positions.get(i).add(sc.nextDouble());
                                }
                                i++;
                            }
                            line++;
                        }
                        sc.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                System.out.println("Nie mogę otworzyć pliku: " + fc.getSelectedFile().getAbsolutePath());
                System.out.println("Problem: " + e1);
            }

to zupełnie nie działa, jeśli tak while(in.readLine() != null) to też nie, bo zawsze był null także już zupełnie nie mam pomysłów

0

@Mattii4211: to zacznij od początku.

  1. Usuń wszystko. Mówiąc wszystko mam na myśli dosłownie wszystko.
  2. Utwórz prosty plik csv zawierający jedną liczbę (NIE ZGZIPOWANY)
  3. Spróbuj ją przeczytać i wyświetlić.
  4. Zgzipuj plik
  5. Teraz powtórz 2 i 3.
  6. Dodaj drugą liczbę. Spróbuj wyświetlić obie.
  7. Spróbuj zapakować te liczby do tablicy.
  8. Dodaj kilka takich linijek i spróbuj wszystko zapakować do tablicy.
  9. I tak dalej...
  10. I tak dalej...

Powoli dodawaj kolejne rzeczy. Będzie Ci znacznie łatwiej jak gdzieś utkniesz, bo krok wcześniej będziesz miał w 100% działający kod, który w 100% rozumiesz. Teraz nic Ci nie działa i nic też nie rozumiesz. Zapamiętaj tą taktykę, bo Ci się przyda w życiu :)

0

No wszystko fajnie ale ja po prostu nie wiem jak tym BufferedReader czytać liczby. Ot cały mój problem. Także twój sposób za bardzo sytuacji nie rozjaśnił

0

Jeśli potnę te linijki po spacji:

String[] out;
                while((s = in.readLine()) != null) {
                    if(line > 1) {
                        out = s.split(" ");
                        for(int j =0; j<out.length; j++) {

to w jaki sposób sprawdzić czy out[j] jest typu double czy int?

Pytanie 2: W każdym przykładzie jaki widziałem jest podana ścieżka do pliku, ja używam JFileChooser a więc czy dla pętli while((s = in.readLine()) != null) źle pobieram ten plik?

in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));
0

Dobra. Problem rozwiązanany

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