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

Java - odczyt z pliku

VPS Starter Arubacloud
0 głosów
4,119 wizyt
pytanie zadane 24 lipca 2018 w Java przez pionas0407 Gaduła (4,620 p.)

Witajcie towarzysze z grupy!

Podczas dalszej nauki programowania Javy.napotkałem na tematykę odczytu i zapisu pliku.

Mam jednak pewien problem, przejdźmy do rzeczy. 

Tutaj daje wam kod:

//Count word occurrences in text file

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Count {
    public static void main(String[] args) throws FileNotFoundException {
        int c = 1;

        File plik = new File("dane.txt"); // obiekt przechowywujące dane z pliku tekstowego
        Scanner in = new Scanner(plik); //odczyt danych
        String zdanie = in.nextLine(); // wczytujemy do zmiennej linie tekstu

        for (int i = 1; i < 4; i++) {
            System.out.print(c + " - ");
            System.out.println(in.next());
            c++;
        }
    }
}

plik dane.txt wygląda następująco:

Ser
Czekolada
Woda
Mleko

Uruchomienie aplikacji wyświetla:

1 - Czekolada

2 - Woda

3 - Mleko

Czemu nie wyświetla mi sera? Gdzie jest błąd? 

 

Drugie pytanie dotyczy odczytu tekstu (tzn. całego pliku nie tylko pierwszej linijki)

Na pewnym forum osoba zaproponowała robienie tego pętlą, to też tak zrobiłem. Jednak on w przykładowym kodzie podał pętle while(ja podczas moich prób napisałem for). Mógłby mi ktoś ją wytłumaczyć linijka po linijce? byłym bardzo wdzięczny.

Scanner odczyt = new Scanner(new File("Test.txt"));

while (odczyt.hasNextLine() { 

System.out.println(odczyt.nextLine()); 

}

odczyt.close();

 

komentarz 24 lipca 2018 przez Mariusz08 Maniak (62,300 p.)

Hmm...dawno nie pisałem w Javie, więc tylko zapytam:

Po co Ci zmienna c? Poza tym dlaczego w pętli zaczynasz od 1?

Poza tym

Scanner odczyt = new Scanner(new File("Test.txt")); //wczytujesz plik do zmiennej odczyt
 
while (odczyt.hasNextLine() { //pętla działa dopóki możliwe jest pobranie kolejnej linii tekstu, póki ta linijka istnieje
 
System.out.println(odczyt.nextLine());  //wypisujesz tą linijkę
 
}
 
odczyt.close(); //zamykasz plik

//Dawno nie pisałem w Javie więc mogą być jakieś błędy (choć raczej nie sądzę,
//w pętlach we wszystkich językach jest to samo, mogę się mylić tylko jeśli chodzi o 
//ostatnią linijkę)

 

komentarz 24 lipca 2018 przez pionas0407 Gaduła (4,620 p.)
Dzięki wielkie za rozpisanie pętli while! Zmienna C jest licznikiem czyli kolejno: 1, 2, 3, 4... :)!!!
komentarz 24 lipca 2018 przez Wiciorny Ekspert (269,120 p.)
a po co w pętli for licznik "C"?

Skoro możesz licznik ustawić na iteratora pętli którą wywołujesz? No inny przypadek jest dla while, ale w twoim wypadku to redundancja :D

1 odpowiedź

+1 głos
odpowiedź 24 lipca 2018 przez RafalS VIP (122,820 p.)
wybrane 25 lipca 2018 przez pionas0407
 
Najlepsza
String zdanie = in.nextLine(); // wczytujemy do zmiennej linie tekstu
...
System.out.println(in.next());

ser jest wczytany do stringa zdanie, dlatego w pętli zaczynasz od drugiej linijki

 

komentarz 24 lipca 2018 przez pionas0407 Gaduła (4,620 p.)
Jak zmieniłem "System.out.println(in.next()) na sout(zdanie) to wypisuje teraz same sery.
komentarz 24 lipca 2018 przez RafalS VIP (122,820 p.)

W momencie stworzenia scannera od pliku zaczyna się czytanie zawartośći tego pliku. Jak coś przeczytasz to to już jest przeczytane :D i kolejne czytania zaczną się za tym co juz przeczytałeś. Przed pętlą czytasz string przy pomocy metody next, dlatego w zmiennej zdanie laduje Ci ser. Potem jest in.nextLine() które odczyta linijke po tym co już przeczytałeś. Dlatego odczyty w pętli zaczynają się od drugiej linijki. Wywal:

String zdanie = in.nextLine();

i przeiteruj o 1 raz wiecej.

Podobne pytania

–1 głos
2 odpowiedzi 5,699 wizyt
pytanie zadane 14 kwietnia 2017 w Java przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
1 odpowiedź 318 wizyt
pytanie zadane 13 grudnia 2018 w Java przez Mateusz Jabłoński Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 156 wizyt

92,452 zapytań

141,261 odpowiedzi

319,074 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...