Zapis i odczyt z plików
Zapis i odczyt danych z plików to już bardziej zaawansowane zagadnienie w Javie, ale na szczęście w przypadku plików tekstowych nie taki diabeł straszny o czym się zaraz przekonamy. Aby sprawnie porozumiewać się z istniejącymi na naszym dysku danymi musimy przede wszystkim poznać kilka podstawowych klas.
Podstawowa klasa, która pozwoli nam utworzyć obiekt przechowujący dane pliku to File. Tworzymy je w następujący sposób:
File plik = new File("nazwa_pliku.txt");
W ten sposób mamy do dyspozycji obiekt File o nazwie plik, który pozwoli nam na operacje na nim.
Odczyt
Na najprostszy odczyt danych pozwala już wcześniej poznana klasa Scanner. Aby utworzyć strumień, należy użyć takiej konstrukcji:
Scanner odczyt = new Scanner(new File("nazwa_pliku.txt"));
Widzimy tutaj typową dla Javy i języków obiektowych konstrukcję polegającą na przekazaniu jednego obiektu jako argument do utworzenia innego. Klasa Scanner "obudowuje" klasę File, rozszerzając jej funkcjonalność o możliwość odczytu pliku. Później przekonamy się, że takich zagnieżdżeń może być dużo więcej.
Gdy mamy utworzony obiekt Scanner z przekazanym jej odpowiednim obiektem File możemy już używać odpowiednich metod, czyli podobnie jak miało to miejsce w konsoli poprawna będzie taka instrukcja:
String text = odczyt.nextLine();
Wczytamy w ten sposób do zmiennej text linię tekstu z pliku tekstowego. Sprawdźmy to na przykładzie. Utwórz plik, w którym zapiszesz jedną dowolną linię tekstu, przykładowo "Ala ma kota, bo nie wzięła leków". Zapisz go jako ala.txt. Kod programu do odczytania tego zdania wyglądałby następująco:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Odczyt {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("ala.txt");
Scanner in = new Scanner(file);
String zdanie = in.nextLine();
System.out.println(zdanie);
}
}
Pamiętaj, aby plik był w tym samym folderze, co plik .class, w innym wypadku podaj ścieżkę do pliku w miejsce jego nazwy.
Widać tutaj jedną dziwną rzecz, mianowicie dopisek FileNotFoundException - jest to wyjątek, który musimy zgłosić, zostawmy to na razie jako magiczny zapis, bez którego wszystko nie zadziała. Po skompilowaniu i uruchomieniu powyższego przykładu powinno nam się wyświetlić nasze zdanie.
Zapis
Kolejnym ważnym zagadnieniem jest zapis do pliku. Możemy tutaj użyć klasy PrintWriter, i utworzyć jej obiekt , ale uwaga jako parametr konstruktora podajemy tutaj tylko nazwę pliku, a nie obiekt File.
PrintWriter zapis = new PrintWriter("nazwa_pliku.txt");
Zapiszemy do pliku ala.txt zdanie "Ala ma kota, a kot ma Alę" przy pomocy metody ***print()***.
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Zapis{
public static void main(String[] args) throws FileNotFoundException{
PrintWriter zapis = new PrintWriter("ala.txt");
zapis.println("Ala ma kota, a kot ma Alę");
zapis.close();
}
}
Bardzo ważne jest, aby zamykać wszelkie strumienie wyjścia, robimy to przy pomocy metody close(), gdy już nie będziemy nic zapisywać przy pomocy danego obiektu. Po otworzeniu pliku ala.txt faktycznie widzimy, że zdanie zostało do niego zapisane. Zapis plików binarnych i inne strumienie danych zostawimy na zdecydowanie dalsze lekcje.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
Cholek
Jak odczytac z pliku *.txt caly tekst z pliku, a nie tylko jedna linie?? Pozdrawiam
dwinar
Napisz pętle czytającą linia po linii.
ht128koo
mógł byś podać jakiś mały przykład bo coś źle robie i nie mogę znaleźć problemu z góry dzieki za pomoc
Witek
Witam Jeżeli chodzi o odczyt linijka po linijce to kilka postów niżej Sławek podał przykład kodu jak odczytać jak to zrobić.
ht128koo
dzieki bląd był w void main
Witek
Witam Mam drobny problem, korzystam z Eclipsa. Problem polega na tym, że nie może znaleźć pliku o nazwie ala.txt tak jak to jest w przykładzie, zrobiłem dokładnie tak jak było napisane, plik znajduje się we folderze bin(D:\CwEclipse\workspace\Lekcja_2\bin\ala.txt) razem z innymi plikami .class, a pomimo to dostaje komunikat, że nie może znaleźć pliku. Co mogłem pominąć ??
Witek
Jeszcze jedno, jak uruchomię ten program bezpośrednio z konsoli to wszystko jest ok.,a jak z Eclipse to nie, może ktoś mi wytłumaczyć dlaczego tak się dzieje. Z góry dziękuje za odp.
Witek
Witam Problem już rozwiązany, został spowodowany nie prawidłowym umieszczeniem pliku tekstowego. W przypadku osób korzystających z Eclips’a plik tekstowy powinien znajdować się w katalogu projektu np.: D:\CwEclipse\workspace\Lekcja_2 , a nie w katalogu z plikami z rozszerzeniem .class
per-anders
dzieki
Krystian
To nieco mylace, wiec sprostuje: Plik tekstowy, jesli nie podasz w nazwie calej sciezki jest tworzony w katalogu, w ktorym masz swoj projekt javowy. Czyli: -Jeśli nic nie zmieniałeś to projekty powinienes miec w workspace w katalogu uzytkownika (dotyczy windows i linux) i wtedy w katalogu Twojego projektu. -Jeśli Twoj projekt jest zapisany w innym miejscu (mogles zmienic miejsce docelowe pracy na poczatku wlaczanie eclipse-a albo dla projektu podac sciezke gdzie ma sie tworzyc) to plik ktory Tworzysz jest w katalogu w ktorym masz projekt. -Jeśli jako nazwę pliku podasz pełną ścieżkę np "C:/mojKatalog1/mojKatalog2/plik.txt" To plik znajduje sie w tym miejscu. Kolega Witek akuratnio miał zapisany projekt tutaj: "D:\CwEclipse\workspace\Lekcja_2", ale rownie dobrze moze byc w kazdym innym miejscu zaleznie od ustawienia. Pozdrawiam Krystian ;)
Filu
Ja nadal nie wiem o co chodzi. Próbuję to zrobić w Eclipse, ale nie rozumiem o które ścieżki chodzi. Włożyłem plik tam gdzie są .class, tam gdzie są .java i nic.
Sławek Ludwiczak
Plik nie ma być ani tam gdzie .class, ani tam, gdzie .java - ma być w głównym folderze projektu :)
Kuba
Dzięki
Damian
"Pamiętaj, aby plik był w tym samym folderze, co plik .class, w innym wypadku podaj ścieżkę do pliku w miejsce jego nazwy." Myślę, że to może być mylące :).
anonim
Ja np. mam zapisane w C:\Documents and Settings
lukasz
no niestety pod netbeansem nie działa: No line found a linia jest, nawet zakoczona enterem
Jędrzej
Działa, działa... Ma być w katalogu z główną klasą...
Witek
Pewnie masz ten sam problem co ja miałem z Eclipse'm, a działa Ci pod konsolą, jak tak to spróbuj go rozwiązać podobnie jak ja zrobiłem to w Eclipsie.
Michał
Witam, nie mogę skompilować przykładu (Odczyt) z tej lekcji: C:\JAVA>javac Odczyt.java Odczyt.java:8: unreported exception java.io.FileNotFoundException; must be caugh t or declared to be thrown Scanner in = new Scanner(file); ^ 1 error
Michał
Już rozwiązane.
Paweł
Siemka, ja mam taki problem, przy próbie odpalenia tego pierwszego przykładowego na tej stronce programu w konsoli pojawia mi się to: Exception in thread "main" java.io.FileNotFoundException: ala.txt (Nie można odnaleźć określonego pliku) chociaż plik (ala.txt) jest w tym samym folderze co plik .class
Greg
mam to samo, any idea?
castro12321
Plik musi być w folderze wcześniej.
Greg
witam, dokladnie to samo, jakies pomysly?
Slawek
używasz eclipse, czy odpalasz programy z konsoli?
Greg
z konsoli, zgodnie z początkowymi zaleceniami.
Greg
solved - nazwa mojego pliku była ala.txt zamiast ala (z rozszerzeniem .txt). teraz hula i buczy
przemi
odpalanie z cmd jest nieefektywne szkoda czasu polecam zamiast Eclipsa programik netbeans
Arkadiusz
A ja JCreator Pro
Grzesiek
hmm. widze komentarze tylko od #13.. ale widze, że komuś też nie mogło znaleźć pliku ala.txt :) używam eclipse, stworzyłem plik tam gdzie są pliki .class i wciąż go nie widzi.... w projekcie \bin w jakimś innym miejscu go zapisać czy to jest odpowiednie miejsce? Pozdrawiam.
Grzesiek
ehhh... post wyżej do usunięcia, głupi jestem, jednak widze poprzednie komentarze poniżej #13 dotyczącego tego samego problemu.
Slawek
muszę poprawić tą nawigację, bo faktycznie jest kiepsko zauważalna ;)
Arkadiusz
Takie małe eksperymenty <code> import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; public class tablica { /** * @param args */ public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub File plik = new File ("odczyt.txt"); //nowy obiekt PrintWriter zapis = new PrintWriter("odczyt.txt"); //metoda zapisu //TABLICE int suma=0; int tab[] = new int[4]; Scanner odczyt = new Scanner(System.in); System.out.format("Tablica składa się z %d elementów\n", tab.length); for (int i=0; i<tab.length; i++){ System.out.println("Prosze podać liczbe"); int w = odczyt.nextInt(); tab[i]=w; } int i; for (i=0; i<tab.length; i++){ System.out.print(" "+tab[i]); } for(int a=0; a<tab.length; a++){ suma=tab[a]+suma; } System.out.println("\nSuma "+suma); zapis.println(suma); zapis.close(); //odczyt Scanner in = new Scanner(plik); String odczyt_2 = in.nextLine(); System.out.println("Odczytany plik " +odczyt_2); } } </code>
Szymon
Przy takim kodzie kompilator wypluwa błąd import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.io.PrintWriter; public class Zad_18{ public static void main(String[] args) { Scanner wpisane = new Scanner(System.in); System.out.println("Podaj swoje imie"); String imie = wpisane.nextLine(); PrintWriter zapis = new PrintWriter("imie.txt"); zapis.println(imie); zapis.close(); File plik = new File("imie.txt"); Scanner odczyt = new Scanner(plik); String srodek = odczyt.nextLine(); System.out.println("Twoje imie ("+srodek+") zostało zapisane do pliku imie.txt"); } }
Witek
Witam Wypluwa błąd bo nie obsłużyłeś wyjątku (FileNotFoundException ma być za main()) oraz masz błędy w ostatniej linijce kodu dotyczące wyświetlania – (("Twoje imie " + srodek + "zostało zapisane do pliku imie.txt"); . Poniżej masz poprawiony kod u mnie działa. <pre name="code" class="java"> import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.io.PrintWriter; public class Zad_18{ public static void main(String[] args)throws FileNotFoundException { Scanner wpisane = new Scanner(System.in); System.out.println("Podaj swoje imie"); String imie = wpisane.nextLine(); PrintWriter zapis = new PrintWriter("imie.txt"); zapis.println(imie); zapis.close(); File plik = new File("imie.txt"); Scanner odczyt = new Scanner(plik); String srodek = odczyt.nextLine(); System.out.println("Twoje imie " + srodek + "zostało zapisane do pliku imie.txt"); } } </pre>
Szymon
Nawet nie wiesz jak mi pomogłeś :D Dziękuję.
Witek
Nie ma za co zrobiłem to z wielką przyjemnością. Pozdrawiam
Paweł
Co do czepialstwa: public static void main(String[] args) throws FileNotFoundException{ ^ Ta spacja powinna być czy nie? w komentarzach w porgramach jej nie ma, a z nią kompilator pluje błędem
Paweł
Przepraszam, napisałem throw, a nie throws. moje niedopatrzenie :P Ale w komentarzu napisałem throws, to jest dziwne
Krzysiek
Może głupie i prymitywne pytanie, ale jak wpisać ścieszkę do pliku bo próbowałem wstawić ją w różne miejsca (w cudysłowiu, przed cudzysówem itp) i mi tego nie kompiluje za chiny np. File a = new File("c:\documents and settings\misiek\desktop\Ala.txt"); bez znaczenia czy nazwy folderów wpiszę z małej czy dużej litery. I tak przy okazji by nie mnożyć postów, jak zapisać pętle czytającą linia po linii o której wspomniano w poscie #2.
ht
hi mam taka prosbe mogl bys podac jakis maly przyklad który bd zapisywal zadania w paru linijkach bo nie moge tego rozgrysc
Vonsuu
Ukośniki w drugą stronę lub podwójnie: c:\\documents and settings\\misiek\\desktop\\Ala.txt
Lukasz
wielkie dzieki za te komentarze, kurs jest genialny, komentarze tez duzo ucza Pozdrawiam
Grzegorz
Chyba brakuje nawiasów kalmrowych po while()
Slawek
Ukośniki w drugą stronę. Przykład odczytu linia po linii poniżej: <pre name="code" class="java"> public static void main(String[] args) throws IOException { File file = new File("C:/Users/Sławek/Desktop/test.txt"); Scanner sc = new Scanner(file); while (sc.hasNextLine()) System.out.println(sc.nextLine()); } </pre>
Jędrzej
Ma ktoś jakiś patent na czytanie z neta? Any idea? Don't worry, be Alt+1.
KOch
Hej, postanowiłem zgłębić javę (programowałem wcześniej w c). Dzięki za kurs - super! A teraz problem: poniższy kod powoduje błąd: linia 16: error: unreported FileNotFoundException; must be caught or declared to be thrown Lerning.lern (void); <code> import java.util.Scanner; import java.io.FileNotFoundException; public class Program{ public static void main(String[] args){ System.out.println("MENU GLOWNE"); System.out.println("aby zaladowac zestaw slowek wybierz 1"); System.out.println("aby wprowadzic nowe slowka wybierz 2"); Scanner menu = new Scanner(System.in); int option = menu.nextInt(); switch (option){ case 1: System.out.println("ta opcja pozwoli przegladac slowka"); Lerning.lern (); break; case 2: System.out.println("ta opcja pozwoli dodac slowka"); break; default: System.out.println("nowy wybor"); } } } </code> Na wszelki wypadek także kod Lerning: <code> import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Lerning{ public static void lern () throws FileNotFoundException { File plik = FileAgent.open (); Scanner in = new Scanner(plik); String line; do{ line = in.nextLine(); //pobieranie kolejnych linii System.out.println(line); }while(line!= null ); //while (in.hasNextLine()) // System.out.println(in.nextLine()); } } </code> z góry dzięki za wszelką okazaną pomoc KOch (student konkurencyjnej P)
HH
Witam Mam plik w którym umieściłem np. 3 wiersze o różnej długości, oczywiście wyświetla poprawnie jednakże chciałbym zliczyć te wszystkie znaki i dalej bawić się w tablicy np. w jakieś szyfrowanie lub inne pierdoły:) Jest ładnie pięknie jednakże nie zlicza mi pierwszego wiersza i nie wiem jaka jest tego przyczyna :( Będę wdzięczny za ideę bądź pomysły, niekoniecznie pomoc w postaci kodu :) <code> package odczyt; import java.io.*; public class Odczyt { public static void main(String[] args) throws IOException { BufferedReader odczyt= new BufferedReader (new FileReader ("tekst.txt")); System.out.println(odczyt.readLine()); } int znak = odczyt.read(); int i=0; while(znak != -1) { System.out.print((char)znak); znak = odczyt.read(); i++; } System.out.println(i); odczyt.close(); } } </code> Pozdrawiam HH newbie in Java
Jędrzej
Czy jest możliwość przeskanowania(?) nazwy katalogów wyżej? Jeżeli tak to jak??? (source code etc.)
Rafał
Witam ja nadal mam problem z plikiem tzn plik widzi ale pisze: Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1516) at lekcja1.Odczyt.main(Odczyt.java:16) Java Result: 1 nawet jak zmieniałem źródło pliku to nic nie pomogło ;/ Nie widzi mi linii.
Barteek
Dodaj linijke na początku: import. java.util.NoSuchElementException;
NRC
Troche dawno zadano to pytanie ale moze ktos bedzie szukal odpowiedzi bo sam z tym problem mialem. w pierwszym przykladzie "odczyt" wywala komunikat: Exception in thread „main” java.util.NoSuchElementException: No line found no i racja bo jest to program do odczytu, jak nie masz nic w pliku to nie ma co odczytac. wiec w ala.txt napisz jakies zdanie w jednej lini.
kuba
Mam dokładnie ten sam problem.
gandy
Sławek Taka mała prośba - jeśli znajdziesz chwilę zamieść programu programu, który otwiera istniejący plik tekstowy i nie kasując tego co w nim jest napisane dokłada na końcu jakiś dowolny string.
Borek
Jak zrobić, aby w fucking if(String == String2) i jeżeli te stringi były by takie same, to wyświelałoby instrukcje dla true ?! Za każdym razem kiedy wpisze w konsoli ( dla if ) String, który jest równi stringowi w warunki wyskakuje mi instrukcja false ( else ) czyli nie te same strinig... Chodzi o to, czy - w instrukcji if warunkiem mogą być Stringi, które sprawdzane są pod względem poprawności danych liter ? Czy trzeba jakąś petle for dawać, aby sprawdzić poprawność dwóch stringów :D ?
Slawek
Oj widać, że z mojego kursiku się nie uczyłeś ;) http://javastart.pl/podstawy-jezyka/operatory-matematycze-i-logiczne/ Użyj equals zamiast ==. W przypadku Stringów == porównuje referencje, nie wartości.
eloelo
Pierwszy program wywala mi taki błąd: Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source)
bonus
Cześć, nie mogę znaleźć odpowiedzi jak zapisać kilka linujek tekstu do pliku. Mój program pobiera wartość od użytkownika, dodaje do poprzedniej i zapisuje w pliku. Chciałbym aby po dodaniu wartości zapisywał ją jako nową wartość z przypisaną datą, na razie jednak program poprostu podmienia starą wartość na nową. Z góry dziękuję za pomoc ; )
Lexus
Kngelwdoe wants to be free, just like these articles!
poczciwiec
jak zapisać plik tak tylko żeby zmieniło mi 1 literkę, przy odczytywaniu używałem .substring ale w zapisywaniu to nie działa, przydało by mi się to bo gdy chce zrobić grę w której zapisuję się postępy musiał bym każdy postęp zapisywać w nowym pliku a tak cały zapis mógł być w 1 pliku np "tnntttntnt" t oznacza tak czyli zdobyłem dany element w grze a n że nie, w grze jak w grze dużo jest elementów do zapisywania i nie chce tworzyć tylu plików
Marcin Kunert
Możesz czytać całą zawartość Twojego pliku, zamienić zawartość i zapisać. //czytanie File file = new File("twoj_plik.txt"); Scanner in = new Scanner(file); String zdanie = in.nextLine(); //zamiana - tutaj w Twoim wypadku wygodniej będzie działać na tablicy znaków char[] temp = str.toCharArray(); temp[2] = 't'; String wynik = String.copyValueOf(temp); //zapis Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); out.write(wynik); out.flush(); out.close();
poczciwiec
dzięki :) w tej linijce gdzie jest "temp[2] = t" to tam gdzie jest 2 to podaje która literę chcę zmienić ?
Marcin Kunert
Dokładnie. W tym wypadku na trzecim miejscu (liczymy od 0) zamiast poprzedniej litery będzie "t".
Krzych
Jak można w javie wyświetlić listę plików w katalogu ?
Adam
Jak mogę odczytać n-tą linię z pliku, przykładowo plik to aaa vvv bbb i chcę żeby do zmiennej poleciało vvv a nie aaa. Muszę napisać program znajdujący największą komplementarność dwóch sekwencji, nie chce nic splitować na tablice char, tylko operować na stringach, substring i porównywanie każdego znaku z każdym w każdej sekwencji z każdą do tego punktacja. Na pewno istnieje na to łatwy sposób ale go nie znam i nie znalazłem w sieci... Do tej pory pisałem w C++, teraz mi każą w javie i same problemy...
Grzegorz
Mam następujący problem. Chcę napisać program, w którym pobiorę 3 imiona, i zapisze je wszystkie 3 do jednego pliku. Jak to zrobić? tzn jak zrobić by to wszystko zapisało się w jednym pliku. Bo jak na razie, to zapisuje mi każde z imion ale np plik z pierwszym imieniem zostaje zastąpiony plikiem txt z drugim imieniem. Ma ktoś pomysł jak to zrobić?
Kamil
Witam, Jaka powinna być ścieżka i gdzie powinien znajdować się plik aby po eksporcie do JAR działało poprawnie? File plik=new File("tekst.txt"); Czy trzeba użyć czegoś podobnego jak przy obrazkach: getClass().getResource(...) ??
Kamil
File plik=new File("./tekst.txt"); plik obok JAR
Erneriusz
A ja mam takie pytanie. Załóżmy, że mam plik a.txt i chce do niego coś zapisać. Kod podany w kursie PrintWriter zapis = new PrintWriter("nazwa_pliku.txt"); zamiast używać istniejącego pliku, tworzy nowy. Jest jakiś sposób, żeby używał do zapisania już istniejącego pliku?
Marcin
Witam, mam problem z tworzeniem pliku w wybranym przeze mnie katalogu w Androidzie. Próbowałem wiele metod, ale za każdym, mimo kompilacji plik się nie tworzy... Ma ktoś jakiś pomysł?
maciuha
"Kolejnym ważnym zagadnieniem jest zapis do pliku. Możemy tutaj użyć klasy PrintWriter, i utworzyć jej obiekt , ale uwaga jako parametr konstruktora podajemy tutaj tylko nazwę pliku, a nie obiekt File." nie prawda :) można również podać obiekt typu file. pozdr.
szefu
metody do zapisania pliku public void zapiszPlik(String nazwa) throws FileNotFoundException { PrintWriter zapis = new PrintWriter(nazwa); Scanner skaner = new Scanner(System.in); System.out.println("Wpisz co chcesz zapisać do pliku (q kończy)"); String znak = ""; while (!znak.equals("q")) { znak = skaner.next(); zapis.println(znak); } zapis.close(); }
szefu
można dodać if (znak.equals("q")) break; else zapis.println(znak);
Kuba
Bardzo, bardzo fajny tutorial o podstawach Javy, jednakże wiele Twoich programów jest niedopracowanych. Czyżbyś ich nie testował? Przykładowo Twój powyższy program do odczytu z pliku po dokładnym przekopiowaniu, nie działa.
Sławek Ludwiczak
ależ oczywiście, że działa.
Dev0
Oczywiście, że nie działa. File plik = new File(ala.txt); Tworzy Ci nowy plik, jeśli zrobisz ręcznie plik i nawet wprowadzisz dane, to po uruchomieniu nadpisze go on pustym plikiem. Czyli: Exception in thread "main" java.util.NoSuchElementException: No line found
capoeiramen
witam, zastanawiam sie, jakby wygladal program do przegladania plikow
Marcin Kunert
Wystarczy wybrać odpowiedni folder i przejrzeć jego zawartość. http://docs.oracle.com/javase/6/docs/api/java/io/File.html#list()
capoeiramen
kurde od paru dni sie mecze, zeby zrobic taki program, chce zrobic explorer plikow, robie liste plikow, potem ja wyswietlam(metoda for), oraz metoda, do powrocenia do poprzedniego katalogu. Przykładowy wynik mialby wygladac np tak: " 1-Wstecz 2-Katalog1 3-Katalog2 4-Katalog3 5-Katalog4 6-Katalog5 7-Plik1 8-Plik2 9-Plik3 10-Plik4 "
capoeiramen
dobra, znalazlem:P chodziło mi w sumie tylko o te 3 linijki, dalej sobie juz poradze;) String dirname = "c:/"; File pliki = new File(dirname); String[] listaPlikow = pliki.list(); metoda for wyswietle, co chcialem:P
Quetzalcoatl
Witam stawiam pierwsze kroki w Javie i proszę o pomoc gdzie tkwi błąd w programie: import java.io.FileNotFoundException; import java.io.PrintWriter; public class Zapis{ public static void main(String[] args) throws FileNotFoundException{ PrintWriter zapis = new PrintWriter("plikdozapisu.txt"); zapis.println("Tekst do wpisania do pliku"); zapis.close(); } }
gunner
Zmień cudzysłowy na "tekst"
Bartek
On ma normalne cudzysłowy! To edytor komentarzy zmienia...
Dev0
import java.io.File;
snt.banzai
W poniższy sposób działa: import java.io.IOException; import java.io.PrintWriter; public class Zapis{ public static void main(String[] args) throws IOException{ PrintWriter zapis = new PrintWriter("plikdozapisu.txt"); String tekst = ("Tekst do wpisania do pliku"); zapis.println(tekst); zapis.close(); } }
Quetzalcoatl
Przyznam, że nie bardzo rozumiem. Bardzo proszę o przykład jak ma to wyglądać.
Leinad
Brak polskich znaków. Jak temu zaradzić?
Bartek
Musisz wpisywac znaki polskie jako Unicode. Dam ci mój sprawdzony sposób ;) Poszukaj sobie w 'Wszystkie programy -> Akcesoria -> Narzędzia systemowe' programu który się nazwywa Tablica znaków. Jak tam wybierzesz jakiś znak, to na dole pisze jego numer (po lewej stronie na dole). Np. jak wybierzesz A, to wyświetli sie U+0041 Teraz, jezeli chcesz zapsiać jakiś znak w javie w kodzie Unicode, wpisujesz /uXXXX, zamiast XXXX podasz mumer z Tablicy znaków po +. Np. dla A: /u0041 Jak bys chciał znak spacji, to należy wpsać /u0000 (Unicode) lub /000 (szesnastkowy). Pozdrawiam :)
Leinad
O to właśnie mi chodziło. Dzięki bardzo za pomoc :)
Bartek
Prosty sposób prześwietlania katalogów: for(int i = 0; i != new File("KATALOG").list().length; i++) { System.out.println(new File("KATALOG").list()[i]); }
Tomek
Witam Kurs jest super. Mam pytanie jak dopisywać do pliku. Podana wyżej metoda nadpisuje dane w pliku. Pozdrawiam
lolo
Użyj klasy FileWriter. Utworzenie obiektu FileWriter plik = new FileWriter("testowy.txt",true); Zapis: plik.write("Test do dopisania"); Zamknięcie strumienia plik.close();
Tomek
Jeszcze jedno pytanie. plik.write(„Test do dopisania”); //dopisuje na końcu pliku, w jednym ciągu Próbowałem wariacji Sring jakisTekst="Tekst do dopisania"; plik.write(jakisTekst+"\n"); //dopisuje dodatkowy 'krzaczek' w pliku Jak powinien wyglądać zapis aby dopisywał za każdym razem w nowej linii? Z góry dziękuje Pozdrawiam
Tomek
Niestety "\r\n", "\n\r", "\n" nie działa. Może jakaś inna konstrukcja - składnia?
lolo
Piszesz w notatniku czy używasz jakiegoś IDE? Spróbuj otworzyć ten plik nie w notatniku(bo zakładam, ze tam otwierasz) a np. w wordzie(jesli posiadasz) albo wordpadzie albo write(jesli masz).
Tomek
Dzięki. Rzeczywiście otworzenie w innym programie niż notatnik pomogło :) Rozjechała się czcionka ale to już szczegół. Pozdrawiam
lolo
U mnie po wpisaniu "\n" przechodzi do nowej linii. Spróbuj napisać "\r\n".
Pawel
Dzięki Wielkie za poradnik wszystko dobrze zrobiłem tylko zamiast String dałem Double :P niech to!
Sławek Ludwiczak
możesz też zamiast \r\n wypróbować metodę System.getProperty("line.separator") - niestety w różnych systemach operacyjnych mogą się czasami pojawiać problemy z różnymi znakami nowej linii :)
Anka
Witam! Może to banalne pytanie, ale nie wyświetlają mi się polskie znaki... (np w zadaniu Odczyt) "Ala ma kota, bo nie wziŕ-a lekˇw" Jak temu zaradzić? Dodam, że w innych ćwiczeniach jest podobnie
lolo
Czego używasz notatnika, jakiegoś IDE? Spróbuj zmienić kodowanie na ASCII.
Anka
Używam zwykłego notatnika. Przepisałam cały kod ręcznie, bez tzw. kopiuj / wklej i dalej to samo.
lolo
A jakie masz kodowanie ustawione?
Marcin
jeżeli używasz konsoli do wyświetlenia to spróbuj wpisać na początku: chcp 1250 Powinno wyskoczyć: "Aktywna strona kodowa: 1250" działa do zamknięcia cmd.
Anka
Dziękuję. Działa :)
Anka
Nie wiem. W ustawieniach czcionki mam zaznaczony skrypt jako zachodnioeuropejski. Jak zmieniam na inny np. środkowoeuropejski lub cyrylica, dalej jest to samo.
k2marko
Też mnie trapi brak polskich znaków. Generalnie pisząc w Eclipse i odczytując kod w eclipsowej konsoli polskie znaki są. Natomiast odczytując z pliku .txt zaczynają się "krzaki" :(
Pewny
Oto sposób na zapis prosto do pliku i odczyt prosto z pliku: import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; public class OdczytZapis{ public static void main(String[] args) throws FileNotFoundException{ System.out.println("Podaj imie"); Scanner input = new Scanner(System.in); PrintWriter zapis = new PrintWriter("plik.txt"); zapis.println(input.nextLine()); zapis.close(); Scanner odczyt = new Scanner(new File("plik.txt")); System.out.println(odczyt.nextLine()); } }
Krzysiek P
Cześć, wpadłem na pomysł napisania programu, który będzie liczył mój czas pracy spędzony na programowaniu. Ma pobrać ode mnie liczbę, zapisać ją, później odczytać pobrać dodatkową, dodać wyświetlić wynik i ponownie zapisać. Pierwszy problem polega na tym, że nie udaje mi się zapisać tego jako liczby, rozumiem, że jak zostawię to jako " String a = input.nextLine();" to później nie będę mógł wykonać na tym dodawania? Drugi jak wykorzystać później odczytane dane i dodać nowe? Pozdrawiam Krzysiek public class Czaspracy{ public static void main(String[] args) throws FileNotFoundException{ Scanner input = new Scanner(System.in); System.out.println("Podaj czas pracy: ");//uzyskanie danych od użytkownika String a = input.nextLine(); PrintWriter zapis = new PrintWriter("czas.txt");// zapisanie danych zapis.print(a); zapis.close(); Scanner odczyt = new Scanner(new File("czas.txt"));// odczytanie danych System.out.println(odczyt.nextLine()); } }
apilat
Użyj Integer a = Integer.parseInt(input.nextLine()); lub Integer a = input.nextInt();
Huehuehue
import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; public class Nowa{ public static void main(String[] args) throws FileNotFoundException{ String imie; Scanner scanner = new Scanner(System.in); System.out.println("Podaj swoje imie: "); imie = scanner.nextLine(); PrintWriter zapis = new PrintWriter("imie.txt"); zapis.println("Twoje imie to: " + imie); zapis.close(); File file = new File("imie.txt"); Scanner in = new Scanner(file); String zdanie = in.nextLine(); System.out.println(zdanie); } }
Paweł
Da radę zaimportować kilka linijek do stringa tak aby użyć tego potem w comboboxie czy trzeba do każdej linijki oddzielnego stringa? A może w ogóle nie trzeba tego wrzucać do stringa? Dodatkowym problemem jest to, że robię to w innej niż główna klasie, w której ten odczyt/utworzony string ma być tylko wynikiem jej działania.
Aleksanderwiel
Odnośnie odczytu i zapisu to mam z tym problem :/. Mógłby mi ktoś powiedzieć w zrozumiały sposób, jak używać programu napisanego w Java? Mam na myśli to, jak go uruchomić poza środowiskiem? Podam tutaj przykład dla uzupełnienia mojego komentarza. Chcę zrobić tak, aby np. kolega, któremu wyślę ten plik, mógł go otworzyć dwukrotnie klikając na niego. Trochę już szukałem na ten temat i opinii było wiele, lecz nie mogę znaleźć tej, której szukam. Wiem też, jak się zapisuje w JAR, lecz nie rozumiem, po co mi jest to potrzebne, skoro chcę zrobić aplikację typu .exe, a nie JAR? Proszę o pomoc. :(
aleksanderwiel
Rozumiem, ale jak w takim razie uruchomić taką aplikację? Jest tu gdzieś opisane, jak tworzyć pliki JAR, a konkretniej - jak je budować, bo wiadome jest mi, że w nich znajduje się taki plik, jak MANIFEST.MF i jeszcze nie za bardzo wiem, jak go konfigurować? :/
Sławek Ludwiczak
W ogólności każda aplikacja Javy pakowana jest do pliku JAR. Jest to spowodowane tym, że Java nie jest językiem kompilowanym do aplikacji natywnej (exe) tylko właściwie archiwum zip o innym rozszerzeniu. Da się aplikację spakować również jako exe (choćby w eclipse wybierając odpowiednią opcję eksportu) jednak de facto jest to tylko opakowanie dla pliku jar.
Piotr
Czy mógłby ktoś powiedzieć mi jak zrobić to by czytać cały plik. Ciągle wyskakują mi błędy. Nie wiem jak do tego dojść.
Janosch
Możesz użyć pętli while, np: Scanner odczyt = new Scanner(new File("Test.txt")); while (odczyt.hasNextLine()) //Pętla wyświetlająca linijki pliku txt dopóki nie dojdzie do końca { System.out.println(odczyt.nextLine()); } odczyt.close();
Janosch
Scanner odczyt = new Scanner(new File("Test.txt")); while (odczyt.hasNextLine() { System.out.println(odczyt.nextLine()); } odczyt.close();
Janosch
Na samym dole pod tym linkiem masz przykład, który wrzuciłem na forum. http://forum.javastart.pl/Thread-Zapis-i-odczyt-plik%C3%B3w Część z pętlą while to jest to co Cię interesuje.
aleksanderwiel
Sławek, mógłbyś mi odpowiedzieć na mojego poprzedniego posta dotyczącego konfiguracji plików MANIFEST.MF i tworzenia opakowań (.exe) dla plików JAR?