Zapis do pliku tekstowego w Java
Pisanie do pliku jest trochę łatwiejsze
niż odczyt z pliku. Aby zapisać do
pliku, użyjemy dwóch wbudowanych klas: FileWriter i PrintWriter.
Stwórzmy nową klasę w projekcie utworzonym w poprzedniej lekcji , klikając na File
> New File z menu
NetBeans. Wybierz Java w sekcji Categories w oknie dialogowym
i Java Class z listy File Types. Kliknij na przycisk Next. W polu Class Name nadajmy klasie nazwę ZapiszPlik ,
a następnie kliknij przycisk Finish. Dodaj
następujące trzy instrukcje importu w nowej klasie:
import
java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.IOException;
Twoja nowa klasa powinna wyglądać jak
poniżej:
package plikitekstowe;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class ZapiszPlik {
}
Ponownie, są
podkreślenia, ponieważ instrukcje nie były jeszcze używane.
Podczas zapisu
do pliku, możesz zacząć od początku i zastąpić wszystko. Albo możesz
zacząć na końcu i dołączyć dane na końcu pliku. Klasa FileWriter pozwala
określić, którą opcje zastosujemy. Dodamy pole, które określa wartość
dołączania do klasy FileWriter. Dodamy również pole, aby ustawić nazwę
pliku.
Dodaj
następujące dwa pola do kodu, oraz konstruktor:
public class ZapiszPlik {
private String sciezka;
private boolean dodaj_do_pliku = false;
public ZapiszPlik(String plik_sciezka){
sciezka = plik_sciezka;
}
}
Pole logiczna nazywa się dodaj_do_pliku zostało ustawione na wartość false . To
jest wartość domyślna dla klasy zapisu do pliku, a to oznacza, że nie chcesz,
aby dołączyć treść, ale usunąć wszystko w pliku.
Konstruktor ustawia wartość dla pola sciezka (zmiennej instancji), które zawiera
nazwę i lokalizację pliku. Te
dane będą przekazane, gdy utworzymy nowy obiekt z naszej klasy ZapiszPlik.
Jak wspomniano w poprzedniej części,
jednak można skonfigurować więcej niż jeden konstruktor w kodzie. Możemy ustawić drugi i przekazać
wartość do niego z drugiego pola. Dzięki
temu, użytkownik może po prostu użyć pierwszego konstruktora i przekazać nazwę
pliku lub nazwę pliku i wartość dołączenia. Należy dodać następujący
konstruktor poniżej pierwszego:
public
ZapiszPlik(String plik_sciezka, boolean dodaj_wartosc){
sciezka = plik_sciezka;
dodaj_do_pliku = dodaj_wartosc;
}
Ten drugi
konstruktor ma teraz dwie wartości w nawiasach okrągłych, ścieżkę pliku i
wartości dopisywania. Jeśli chcesz dołączyć wartości do pliku można użyć
tego konstruktora przy tworzeniu nowego obiektu. Jeśli po prostu chcesz
zastąpić plik tekstowy, a można użyć pierwszego konstruktora.
Okno kodu
powinno wyglądać jak poniżej:
package plikitekstowe;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class ZapiszPlik {
private String sciezka;
private boolean dodaj_do_pliku = false;
public ZapiszPlik(String plik_sciezka){
sciezka = plik_sciezka;
}
public ZapiszPlik(String plik_sciezka, boolean dodaj_wartosc){
sciezka = plik_sciezka;
dodaj_do_pliku = dodaj_wartosc;
}
}
Aby zapisać plik, dodaj następującą
metodę poniżej swoich dwóch konstruktorów:
public void zapiszDoPliku(String tekstLinia) throws
IOException {
}
}
Metoda ta nie
wymaga, aby zwrócić wartość, więc użyliśmy instrukcji void. W nawiasach
okrągłych po nazwie metody mamy zmienną String o nazwie tekstLinia. To jest oczywiście tekst,
który chcemy zapisać do pliku. Ponownie, musimy dodać instrukcję
"throws IOException", aby obsłużyć błędy podczas zapisu do plików.
Pierwszą
rzeczą, którą musimy w tej metody napisać jest utworzenie obiektu
FileWriter. FileWriter dba o otwieranie prawidłowo pliku i przechowywać
tekst jako bajty. Dodaj następujący wiersz do metody zapiszDoPliku:
FileWriter
napisz = new FileWriter(sciezka, dodaj_do_pliku);
Tworzymy nowy obiekt FileWriter o
nazwie napisz. W nawiasach
okrągłch obiektu FileWriter umieszczamy nazwę i lokalizację pliku, plus wartość
dołączenia. To będzie albo true (dołączyć
do pliku) lub false (nie
dołączyć). Jeśli plik o podanej
nazwie nie istnieje, FileWriter tworzy plik dla Ciebie.
FileWriter zapisuje jednak bajty. Ale możemy dodać zwykły tekst do
FileWriter za pomocą klasy PrintWriter. PrintWriter ma kilka przydatnych metod
drukowania. Ale potrzebuje nazwę
obiektu FileWrite, podczas tworzenia obiektu z klasy. Dodać poniższą linię do swojej metody:
PrintWriter
drukuj_linie = new PrintWriter(napisz);
Nasz obiekt
PrintWriter nazywa się drukuj_linie. W między nawiasy okrągłe z
PrintWriter dodaliśmy nazwę naszego obiektu zapisu do pliku.
Aby dodać tekst
do pliku, wpisz nazwę obiektu PrintWriter a następnie kropkę:
drukuj_linie.
Jak tylko wpiszesz kropkę, NetBeans
wyświetli listę dostępnych opcji:
Istnieje całe mnóstwo opcji drukowania
na liście!
Użyjemy jednej
z metod printf. W ten sposób można przekazać sformatowany ciąg
tekstu do PrintWriter. Dobrym powodem, dla zastosowania instrukcji printf
jest obsługa znaków nowego wiersza. Obsługa nowego wiersza różni się, w
zależności od używanego systemu operacyjnego. W Windows należy dodawać
znaki \r \n dla nowej linii.Ale w systemie Unix wystarczy użyć
\n. Korzystanie z funkcji printf zapewni odpowiednie kodowanie, bez
względu na platformę.
Dodaj
następujący wiersz kodu:
print_line.printf(
"%s" + "%n" , textLine);
We've handed
the printf method two things: a format for the text, and the string we want to
write to the file. The two are separated by a comma. Notice the first of the
two:
Metoda printf posiada dwa argumenty:
formatowanie tekstu i ciąg, który chcemy zapisać do pliku. Dwa argumenty są oddzielone
przecinkami. Zauważ, że pierwszy z nich:
"%s"
+ "%n"
%s w
cudzysłowach oznacza ciąg znaków o dowolnej długości. %n oznacza znak
nowej linii. Więc mówimy metodzie printfaby sformatowała ciąg znaków i
dodała na znak nowej linii na końcu. Rzeczywisty tekst, który wymaga
formatowania znajduję się po przecinku. Metoda printf jest bardzo
przydatna, a my ją bardziej szczegółowo omówimy w dalszej części.
Dodaj poniższy
wiersz kod do metody:
drukuj_linie.close();
Linia ta zamyka
plik tekstowy i zwalnia wszelkie zasoby jakie były używane.
Klasa
ZapiszPlik powinna teraz wyglądać tak:
package plikitekstowe;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class ZapiszPlik {
private String sciezka;
private boolean dodaj_do_pliku = false;
public ZapiszPlik(String plik_sciezka){
sciezka = plik_sciezka;
}
public ZapiszPlik(String plik_sciezka, boolean dodaj_wartosc){
sciezka = plik_sciezka;
dodaj_do_pliku = dodaj_wartosc;
}
public void zapiszDoPliku(String tekstLinia) throws IOException {
FileWriter napisz = new FileWriter(sciezka, dodaj_do_pliku);
PrintWriter drukuj_linie = new PrintWriter(napisz);
drukuj_linie.printf("%s" + "%n", tekstLinia);
drukuj_linie.close();
}
}
Aby przetestować swoją nową klasę, powróć
do swojej klasy PlikiTektsowe (z metodą main).Dodaj następujący wiersz, aby
utworzyć nowy obiekt z klasy WriteFile:
ZapiszPlik
dane = new ZapiszPlik(nazwa_pliku,true);
Utworzyliśmy obiekt ZapiszPlik o nazwie
dane. W nawiasach okrągłych
obiektu ZapiszPlik, dodaliśmy dwie rzeczy: nazwę pliku, i wartość dołącz z
parametrem true. Zapewni to, że
drugi z konstruktorów zostanie wywołany. Jeśli
chcemy po prostu zastąpić plik, kod będzie wyglądał jak poniżej:
ZapiszPlik
dane = new ZapiszPlik(nazwa_pliku);
Ponieważ możemy
ustawić domyślną wartość dołączania jako false, musimy podać tylko nazwę pliku,
jeżeli chcemy, aby zastąpić całą zawartość.
Aby wywołać
metodę zapiszDoPliku obiektu ZapiszPlik, dodaj następującą linię:
dane.zapiszDoPliku("To
jest nowa linia w pliku tekstowym");
Zapraszam do
zmiany tekstu w nawiasach okrągłych metody.
Aby użytkownik
wiedział, że coś się stało, można wydrukować informacje w oknie Output:
System.out.println("Tekst
zapisany do pliku");
Kod klasy PlikiTekstowe powinien
wyglądać jak poniżej:
package plikitekstowe;
import java.io.IOException;
public class PlikiTekstowe {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
String nazwa_pliku = "c:/test.txt";
try {
CzytajPlik plik = new CzytajPlik(nazwa_pliku);
String[] wierszTablicy = plik.OtworzPlik();
int i;
for(i=0; i < wierszTablicy.length;i++){
System.out.println(wierszTablicy[i]);
}
} catch (IOException e) {
System.out.println("Nie odnaleziono pliku");
}
//Zapis do pliku
ZapiszPlik dane = new ZapiszPlik(nazwa_pliku,true);
dane.zapiszDoPliku("To jest nowa linia w pliku tekstowym");
System.out.println("Tekst zapisany do pliku");
}
}
Jeśli chcesz, dodać kolejny blok try ... catch do części kodu odpowiedzialnego za
zapis do pliku, zmień go na następujący:
//Zapis do pliku
try {
ZapiszPlik dane = new ZapiszPlik(nazwa_pliku,true);
dane.zapiszDoPliku("To jest nowa linia w pliku tekstowym");
System.out.println("Tekst zapisany do pliku");
} catch(IOException e){
System.out.println(e.getMessage());
}
Teraz uruchom swój kod, aby
przetestować go. Powinieneś
zobaczyć zawartość pliku tekstowego w oknie Output a następnie komunikat, że
plik tekstowy został zapisany:
run:
To jest linia pierwsza
To jest linia druga
To jest linia trzecia
To jest linia czwarta
Tekst zapisany do pliku
BUILD SUCCESSFUL (total time: 0 seconds)
Uruchom program ponownie i powinieneś
zobaczyć, że pojawi się nowa linia.
run:
To jest linia pierwsza
To jest linia druga
To jest linia trzecia
To jest linia czwarta
To jest nowa linia w pliku tekstowym
Tekst zapisany do pliku
BUILD SUCCESSFUL (total time: 0 seconds)
I to jest to - można teraz zapisać do pliku tekstowego i przeczytać jego zawartość. W następnej części, będziemy uczyć się programowania formularzy Java.
Brak komentarzy:
Prześlij komentarz