cloudx Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 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();}} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 a jak ma czytać wszystkie skoro czytasz raz tylko jedną linię? linia = plikWejsciowy.readLine(); :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 Innymi słowy, musisz użyć pętli. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
cloudx Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 (edytowane) 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 2 Grudnia 2007 przez cloudx Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 (edytowane) Mógłbyś chociaż napisać w której linijce wyrzuca ci NullPointerException. Edytowane 2 Grudnia 2007 przez thuGG Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
cloudx Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 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ą^^ Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Prog Opublikowano 2 Grudnia 2007 Zgłoś Opublikowano 2 Grudnia 2007 Spróbuj poprawnie zainicjalizować zmienną String linia = new String(); NullPointerException często jest wynikiem złej inicjalizacji zmiennych. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Yacho Opublikowano 3 Grudnia 2007 Zgłoś Opublikowano 3 Grudnia 2007 (edytowane) 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 3 Grudnia 2007 przez Yacho Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 3 Grudnia 2007 Zgłoś Opublikowano 3 Grudnia 2007 (edytowane) 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 3 Grudnia 2007 przez PelzaK Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Yacho Opublikowano 4 Grudnia 2007 Zgłoś Opublikowano 4 Grudnia 2007 (edytowane) 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 4 Grudnia 2007 przez Yacho Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Ragnor Opublikowano 4 Grudnia 2007 Zgłoś Opublikowano 4 Grudnia 2007 (edytowane) 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 4 Grudnia 2007 przez Ragnor Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 4 Grudnia 2007 Zgłoś Opublikowano 4 Grudnia 2007 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Ragnor Opublikowano 5 Grudnia 2007 Zgłoś Opublikowano 5 Grudnia 2007 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...