Skocz do zawartości
cloudx

[java] Odczyt Linii W Pliku

Rekomendowane odpowiedzi

Mam problem i potrzebuję pomocy. Otóż: program nie czyta mi wszystkich linijek pliku - czyta tylko pierwszą. Co wpisać żeby czytał wszystkie linijki? Proszę o szybką odpowiedź. To ważne.

 

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Pliki {	public static void main(String[] args) throws IOException 	{						BufferedReader plikWejsciowy = new BufferedReader(new FileReader("dane.txt"));			 		System.out.println("Tekst, ktory zostal przeczytany z pliku:");				String linia; 				linia = plikWejsciowy.readLine();			System.out.println(linia);		linia = linia.replaceAll("cos", "nic");				BufferedWriter plikWyjsciowy = null;		try 		{						plikWyjsciowy = new BufferedWriter(new FileWriter("wynik.txt"));			System.out.println("Tekst, ktory został zapisany do pliku wynik.txt:");						System.out.println(linia);			plikWyjsciowy.write(linia);					}		catch (FileNotFoundException fnf) 		{			System.err.println("BŁĄD zapisu! Plik nie znaleziony.");			}		catch (SecurityException se) 		{			System.err.println("BŁĄD zapisu! Zabroniony dostęp do pliku.");			}					finally 		{			plikWyjsciowy.close();		}						plikWejsciowy.close();}}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Innymi słowy, musisz użyć pętli.

ok mam teraz tak:

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Pliki {	public static void main(String[] args) throws IOException 	{						BufferedReader plikWejsciowy = new BufferedReader(new FileReader("dane.txt"));			 				System.err.println("Tekst, ktory zostal przeczytany z pliku:");		String linia; 		int i=1;		while (true) //wypisywanie kolejnych linijek tekstu w konsoli		{						linia = plikWejsciowy.readLine();			System.out.println(linia); 			i++;				if (linia == null) 					{						break;					}					}						linia = linia.replaceAll("cos", "nic");				BufferedWriter plikWyjsciowy = null;		try 		{						plikWyjsciowy = new BufferedWriter(new FileWriter("wynik.txt"));			System.err.println("Tekst, ktory został zapisany do pliku wynik.txt:");						System.out.println(linia);			plikWyjsciowy.write(linia);					}		catch (FileNotFoundException fnf) 		{			System.err.println("BŁĄD zapisu! Plik nie znaleziony.");			}		catch (SecurityException se) 		{			System.err.println("BŁĄD zapisu! Zabroniony dostęp do pliku.");			}					finally 		{			plikWyjsciowy.close();		}								plikWejsciowy.close();}}
i wyrzuca mi NullPointException i nie zapisuje do pliku kompletnie nic

 

generalnie polecenie mam takie: Napisz program odczytujący dane z pliku tekstowego (dane.txt), wypisujący ten tekst na ekranie, zamieniający wybrane słowo na inne i ponownie zapisujący ten nowy tekst do innego pliku (wyniki.txt).

Edytowane przez cloudx

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mógłbyś chociaż napisać w której linijce wyrzuca ci NullPointerException.

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Pliki {	public static void main(String[] args) throws IOException 	{				System.err.println("Tekst, ktory zostal przeczytany z pliku:");		BufferedReader plikWejsciowy = new BufferedReader(new FileReader("dane.txt"));			 		BufferedWriter plikWyjsciowy = null;				String linia; 		int i=0;		while (true)		{		  linia = plikWejsciowy.readLine();		  if ( linia == null ) break;		  i++;		  [b]plikWyjsciowy.write( linia + "\r\n");[/b]		}			System.out.println(linia);		linia = linia.replaceAll("ene", "nic");						try 		{						plikWyjsciowy = new BufferedWriter(new FileWriter("wynik.txt"));			System.err.println("Tekst, ktory został zapisany do pliku wynik.txt:");						System.out.println(linia);			plikWyjsciowy.write(linia);					}				catch (FileNotFoundException fnf) 		{			System.err.println("BŁĄD zapisu! Plik nie znaleziony.");			}		catch (SecurityException se) 		{			System.err.println("BŁĄD zapisu! Zabroniony dostęp do pliku.");			}						}						//plikWejsciowy.close();}
Zmieniłam kod troszkę. NullPointer wyrzuca w pogrubionej linii

 

 

 

PS. Jestem dziewczyną^^

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Totalny brak pomyślunku :

 

Najpierw inicjalizujesz PrintWritera tak :

BufferedWriter plikWyjsciowy = null;

A potem sie dziwisz ze jest NPE :P:P:P

 

Spróbuj poprawnie zainicjalizować zmienną

String linia = new String();

NullPointerException często jest wynikiem złej inicjalizacji zmiennych.

Po pierwsze nie zmienna tylko obiekt;

Po drugie kod z użytą ale niezainicjalizowaną zmienną nawet sie nie skompiluje.

Po trzecie jak najbardziej mozna zapisac null do pliku - a NPE wyskakuje wtedy gdy wartosc null wystepuje podczas runtime tam gdzie nie jest przewidziana. (jako ze domyslnie niezainicjalizowany string jest nullem kazda metoda przyjmujaca string musi nulla obsluzyc.)

Edytowane przez Yacho

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jak zwykle początkujący nie czytają błędów :). Błędy są po to żeby je czytać i poprawiać a nie panikować że nie działa :)

 

Jak piszę koda w pracy to nieraz mam z 500 błędów, które zazwyczaj wynikają z prozaicznego niedomkniętego nawiasu - i co mam panikować? Czytam co pisze do mnie kompiltor czy linker, patrzę w której linijce i po problemie.

 

Rzadko zdarzają się błędy, w których nie wiadomo o co chodzi.

Do tego ludzie.. nauczcie się korzystac z debugera - bez tego nei da się pisać sensownych programów. :)

 

Po pierwsze nie zmienna tylko obiekt;

Po drugie kod z użytą ale niezainicjalizowaną zmienną nawet sie nie skompiluje.

no to zmienną czy obiektem.. z tego co się orientuję to w javuni wszystko jest obiektem :) a skoro poprawiasz poprzednika że string to nie zmienna a obiekt, to o jakich zmiennych Ty mówisz :wink: Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W javie są zmienne prymitywne (primitive types) ale string do nich NIE NALEZY. Zauwaz ze inicjalizujac stringa piszesz :

String s = "DupawKwiatach";
a inta tak :

int i = 10;

String jest z dużej litery ponieważ jest klasą stąd jej instancje to obiekty.

Primitive types działąją jak w innych językach - gdy chcemy uzyc bardziej zaazansowanych opcji reprezentacji typu prostego używamy klas opakowujących (wrapper classes) naprzykład : Integer, Double, Float itp.

Roznica pomiedzy zmienną typu prymitywnego a referencja wskazujaca na obiekt jest taka ze ta druga jesli nie zostanie zainicjalizowana wskazuje zawsze na null.

stąd Stringa inicjalizować nie trzeba, natomiast zmienne typów prostych wypada (choc w pewnych momentach przyjma one wartosci domyslne chyba ale nei jestem pewien wiec mieszac nie bede :) )

Edytowane przez Yacho

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W javie są zmienne prymitywne (primitive types) ale string do nich NIE NALEZY. Zauwaz ze inicjalizujac stringa piszesz :

String s = "DupawKwiatach";
a inta tak :

int i = 10;

String jest z dużej litery ponieważ jest klasą stąd jej instancje to obiekty.

Primitive types działąją jak w innych językach - gdy chcemy uzyc bardziej zaazansowanych opcji reprezentacji typu prostego używamy klas opakowujących (wrapper classes) naprzykład : Integer, Double, Float itp.

Roznica pomiedzy zmienną typu prymitywnego a referencja wskazujaca na obiekt jest taka ze ta druga jesli nie zostanie zainicjalizowana wskazuje zawsze na null.

stąd Stringa inicjalizować nie trzeba, natomiast zmienne typów prostych wypada (choc w pewnych momentach przyjma one wartosci domyslne chyba ale nei jestem pewien wiec mieszac nie bede :) )

Rozpisałeś się, chciałeś wytchnąć innym błędy, lecz w swym wytłumaczeniu sam błędy popełniłeś.

To jak zostanie zainicjowana zmienna (prymityw) lub referencja zależy od zakresu w którym pojawi się definicja. Jeśli definicja zmiennej, referencji pojawi się w zakresie obiektu/klasy to działa to tak że referencja jest ustawiana na null a zmienna (typ prosty) na domyślną wartość np. dla bool to false. Lecz gdy definiujesz zmienna, referencję w zakresie lokalnym (w metodzie) wtedy nie są nadawane wartości domyślne ani null i nie można użyć takiej zmiennej, referencji bez wcześniejszego przypisania jakieś wartości. Dla przykłady takie coś się nie skompiluje w ogóle:

public class Example {	public static void main(String [] args) {		Object o;		if (o == null) {			System.out.println("Jestem null");		} else {			System.out.println("Kim ja jestem?");		}	}}
Edytowane przez Ragnor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

to ze zmienne referencyjne wymagają inicjalizacji to już jest od czasów C++ :). Wydawało mi się, że typy proste w javie są aliasami na obiekty, jak to ma miejsce w .necie

Własnie tak nie jest, typy proste w javie nie są obiektami (ich "klasy" nie dziedziczą po Object). Elementy typów prostych są tworzone na stosie a nie jak obiekty na stercie. Przekazywanie typów prostych odbywa się przez kopiowanie wartości (w końcu element znajduje się na stosie) a nie jak w przypadku obiektów kopiowanie referencji.

Z tego co się orientuje zostało to tak zaimplementowane z powodów wydajnościowych, obsługa stosu jest o wiele szybsza niż alokowanie pamięci na stercie.

To, że w javie typów prostych i klas opakowujących można od wersji 5.0 używać zamiennie (jak metoda potrzebuje Integer można spokojnie dać jej int i na odwrót) wynika z wprowadzonych mechanizmów autoboxing i autounboxing.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...