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

Java - odczyt z pliku

0 głosów
57 wizyt
pytanie zadane 24 lipca w Java przez pionas0407 Użytkownik (930 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 przez Mariusz08 Nałogowiec (43,500 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 przez pionas0407 Użytkownik (930 p.)
Dzięki wielkie za rozpisanie pętli while! Zmienna C jest licznikiem czyli kolejno: 1, 2, 3, 4... :)!!!
komentarz 24 lipca przez Wiciorny Maniak (66,200 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 przez RafalS Szeryf (81,250 p.)
wybrane 25 lipca 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 przez pionas0407 Użytkownik (930 p.)
Jak zmieniłem "System.out.println(in.next()) na sout(zdanie) to wypisuje teraz same sery.
komentarz 24 lipca przez RafalS Szeryf (81,250 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 992 wizyt
pytanie zadane 14 kwietnia 2017 w Java przez Patryk Rafał Bywalec (2,540 p.)
0 głosów
1 odpowiedź 58 wizyt
pytanie zadane 4 dni temu w Java przez Mateusz Jabłoński Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 292 wizyt
pytanie zadane 4 września 2017 w Java przez Hiskiel Pasjonat (17,120 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

57,748 zapytań

102,788 odpowiedzi

212,076 komentarzy

29,694 pasjonatów

Przeglądających: 316
Pasjonatów: 11 Gości: 305

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...