• 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
80 wizyt
pytanie zadane 24 lipca 2018 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 2018 przez Mariusz08 Nałogowiec (43,540 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 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 2018 przez Wiciorny Maniak (66,600 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 (102,670 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 Użytkownik (930 p.)
Jak zmieniłem "System.out.println(in.next()) na sout(zdanie) to wypisuje teraz same sery.
komentarz 24 lipca 2018 przez RafalS VIP (102,670 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 1,188 wizyt
pytanie zadane 14 kwietnia 2017 w Java przez Patryk Rafał Bywalec (2,560 p.)
0 głosów
1 odpowiedź 69 wizyt
pytanie zadane 13 grudnia 2018 w Java przez Mateusz Jabłoński Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 363 wizyt
pytanie zadane 4 września 2017 w Java przez Hiskiel Pasjonat (20,310 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

60,207 zapytań

105,878 odpowiedzi

219,906 komentarzy

32,422 pasjonatów

Przeglądających: 183
Pasjonatów: 6 Gości: 177

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.

...