Program asring banget kalebu syarat kanggo nulis data kanthi cepet menyang file utawa ing papan liya. Lan iki nuwuhake pitakon: Kepiye carane nindakake iki? Kelas endi sing kudu kita pilih? Dina iki kita bakal ngerti calon sing cocog kanggo peran iki - kelas BufferedWriter .

Napa kita butuh BufferedWriter?

BufferedWriter minangka kelas sing nulis karakter buffered menyang stream. Ngidini sampeyan nyuda kaping sampeyan ngakses media fisik. Sing, tinimbang nulis karakter siji saben wektu, iku nulis data menyang buffer, lan banjur nulis kabeh karakter kanggo medium bebarengan.

Iki nemen nambah kacepetan nulis. Ukuran buffer standar yaiku 8192 karakter, nanging iki bisa diganti kanthi nemtokake ukuran anyar ing konstruktor:

BufferedWriter(Writer in, int sz)

Ing kene, argumen pertama konstruktor yaiku aliran sing bakal nampa data sing kita tulis. Lan dadi metu sing sz ukuran buffer anyar.

Jawa uga nduweni kelas BufferedReader : digunakake kanggo maca data buffered.

Apa sejatine buffer? Ayo padha njupuk conto urip nyata. Penyangga kaya kranjang utawa keranjang blanja ing supermarket. Tinimbang mlaku-mlaku menyang kasir nganggo barang siji, mbayar, dilebokake ing bagasi mobil, banjur bali maneh kanggo barang liyane, kita bisa njupuk troli blanja, nyelehake kabeh sing dikarepake, banjur mbayar. ing checkout. Iki minangka cara kerja buffer: ngumpulake data banjur njupuk kabeh lan nulis, tinimbang nulis saben fragmen kanthi kapisah.

Konstruktor lan metode kelas BufferedWriter

Saiki ayo deleng kelas BufferedWriter . Ana rong konstruktor kanggo nggawe obyek:

public BufferedWriter(Writer out)
public BufferedWriter(Writer out, int sz)

Where metu ing loro konstruktor punika stream kanggo nulis, lan sz , minangka wis kasebut, ukuran buffer.

Kelas BufferedWriter uga duwe sawetara metode. Kita bakal nliti sawetara ing dina iki:

tulis(char[] array) Nulis array char menyang buffer
tulis (String s, int off, int len) Nulis bagean senar menyang buffer
tambahan (karakter c) Tulis karakter menyang buffer
append(CharSequence csq, int wiwitan, int pungkasan) Nulis bagean saka array menyang buffer
newLine() Nulis pemisah baris
flush() Flushes aliran

Ayo nulis program sing bakal nulis nilai menyang file. Kanggopanulisparameter, kita bakal pass aFileWritermarang konstruktor. Iki digunakake kanggo nulis file teks lan duwe sawetara konstruktor kanggo miwiti obyek:

FileWriter(File File)
FileWriter(File File, boolean append)
FileWriter(FileDescriptor fd)
FileWriter(String fileName)
FileWriter(String fileName, boolean append)

Contone, kita bakal nggunakake konstruktor sing njupuk jeneng file:

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){

	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message);
	bufferedWritter.flush();
}
catch(IOException ex){
System.out.println(ex.getMessage());
 }

Kode kita bakal nggunakake cara nulis (String str) kanggo nulis str menyang file file.txt .

Ana cara liya kanggo nulis:

  • write(char[] array ) — varian iki nampa lan nulis array char ;

  • write(String s, int off, int len) — varian iki njupuk string s ; offset off , yaiku indeks karakter kanggo miwiti nulis; lan len , yaiku dawa senar (substring) sing bakal ditulis.

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message, 0, 11);
 	bufferedWriter.flush();

} catch(IOException ex) {
System.out.println(ex.getMessage());
}

Kode iki bakal nulis "Hello, Amig" menyang file, amarga kita ngandhani cara nulis 11 karakter wiwit saka indeks 0.

Kode kita uga duwe blok sumber daya nyoba :

try(BufferedWriter bufferedWritter = new BufferedWriter(new FileWriter("file.txt")))

Iki tegese cedhak () cara disebut kanthi otomatis ing sandibufferedWriterobyek, amarga nindakake antarmuka AutoCloseable .

Flush () cara ing kode digunakake kanggo flush stream output, meksa kabeh bait buffered ditulis. Nulis bisa uga ora kelakon tanpa telpon iki, awit iku nuduhake yen buffer kudu flushed lan bait buffered kudu ditulis.

Kelas BufferedWriter uga duwe metode newLine () sing nambah baris anyar menyang pesen:

try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
        String message = "Hello, Amigo! This is a very important message!";
        bufferedWriter.write(message, 0, 13);
        bufferedWriter.newLine();
        bufferedWriter.write(message, 15, 33);
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }

Ing file, kita entuk:

Hello, Amigo!
Iki pesen sing penting banget!

Tandha saka metode append() katon kaya iki:

public Writer append(CharSequence csq, int start, int end)

Iki digunakake kanggo nambah csq . Ing kene wiwitan minangka indeks karakter pisanan, lan pungkasan minangka indeks saka karakter pungkasan senar (utawa substring) sing bakal dilebokake. Karakter kanthi indeks pungkasan ora dilebokake.

try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
    String message = "Hello, Amigo! This is a very important message!";
    bufferedWriter.append(message, 0, 7);
    bufferedWriter.flush();
} catch (IOException ex) {
    System.out.println(ex.getMessage());
}

Kode iki bakal menehi sampeyan:

halo,

Yaiku, kanthi cara append , sampeyan nemtokake bagean senar sing bakal ditambahake menyang buffer.

Nggoleki luwih cetha ing prabédan antarane write () lan append () , kita pisanan weruh sing loro padha nindakake ing asas - padha nulis nilai.

Nanging, bedane yaiku metode append luwih anyar lan njupuk CharSequence minangka argumen, lan amarga String ngetrapake CharSequence , kita bisa ngliwati Strings lan StringBuilders , lan StringBuffers menyang metode append . Nanging cara nulis () mung bakal nampa String .

Semono wae! Dina iki kita kenal karo buffer, cara nulis buffered menyang file, uga cara sing bisa digunakake kanggo nindakake iki.