"Hai! Ing wulangan dina iki, kita bakal nerusake obrolan babagan input lan output stream ing Jawa ( Java I / O ). Iki dudu pelajaran pertama babagan topik iki, lan mesthi ora bakal dadi sing terakhir
:) mengkono, basa Jawa menehi akeh cara kanggo bisa karo I / O. Ana cukup sawetara kelas sing ngleksanakake fungsi iki, supaya kita wis dipérang dadi sawetara pawulangan — supaya sampeyan ora bakal bingung saka wiwitan :) pawulangan, kita kena ing
Ing ngisor iki katon kaya maca data saka file nggunakake

BufferedReader
, uga InputStream
kelas OutputStream
abstrak lan sawetara turunan Dina iki kita bakal nimbang 3 kelas anyar: FileInputStream
, FileOutputStream
, lan BufferedInputStream
.
Kelas FileOutputStream
Tujuan utama kelasFileOutputStream
yaiku nulis bita menyang file. Ora ana sing rumit :) FileOutputStream
minangka salah sawijining implementasi OutputStream
kelas abstrak. Ing konstruktor, obyek saka kelas iki njupuk path menyang file target (ngendi bait kudu ditulis) utawa obyek File
. Kita bakal nliti conto saben:
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\Username\\Desktop\\test.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String greetings = "Hi! Welcome to CodeGym — The best site for would-be programmers!";
fileOutputStream.write(greetings.getBytes());
fileOutputStream.close();
}
}
Nalika nggawe File
obyek, kita ngliwati dalan sing dikarepake menyang konstruktor. Kita ora perlu nggawe luwih dhisik: yen ora ana, program bakal nggawe. Sampeyan uga bisa entuk tanpa nggawe obyek ekstra, mung ngliwati senar kanthi path:
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt");
String greetings = "Hi! Welcome to CodeGym — The best site for would-be programmers!";
fileOutputStream.write(greetings.getBytes());
fileOutputStream.close();
}
}
Asil ing loro kasus bakal padha. Kita bisa mbukak file lan ndeleng ing ngisor iki:
Hi! Welcome to CodeGym — The best site for would-be programmers!
Nanging ana siji nuansa ing kene. Coba mbukak kode saka conto ing ndhuwur kaping pirang-pirang saurutan. Banjur katon ing file lan jawab pitakonan iki: carane akeh baris iku? Mung siji. Nanging sampeyan mbukak kode kaping pirang-pirang. Pranyata data ditimpa saben wektu - sing lawas diganti sing anyar. Apa sing kudu ditindakake yen ora cocog karo kita lan kita kudu nulis kanthi urutan menyang file kasebut? Kepiye yen kita pengin nulis salam menyang file kaping telu berturut-turut? Kabeh iku prasaja banget. Amarga basa ora bisa ngerti prilaku apa sing dibutuhake ing saben kasus, contrucutor FileOutputStream
bisa njupuk parameter tambahan -boolean append
. Yen nilai kasebut bener, data kasebut bakal ditulis nganti pungkasan file. Yen palsu (lan minangka standar palsu), data lawas bakal dibusak lan diganti karo data anyar. Ayo priksa iki kanthi mbukak kode sing diowahi kaping telu:
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt", true);
String greetings = "Hi! Welcome to CodeGym — The best site for would-be programmers!\r\n";
fileOutputStream.write(greetings.getBytes());
fileOutputStream.close();
}
}
Isi berkas:
Hi! Welcome to CodeGym — The best site for would-be programmers!
Hi! Welcome to CodeGym — The best site for would-be programmers!
Hi! Welcome to CodeGym — The best site for would-be programmers!
Saiki wis beda! Aja lali babagan fitur iki nalika nggunakake kelas I/O. Ana wektu nalika aku ngentekake pirang-pirang jam kanggo tugas-tugas, otakku nganti pirang-pirang jam, nyoba ngerti kepiye dataku ilang saka file :) Lan mesthi, kaya kelas I / O liyane, aja lali nggunakake metode kasebut close()
. kanggo sumber daya gratis.
Kelas FileInputStream
TujuaneFileInputStream
ngelawan - maca bita saka file. Kaya FileOutputStream
warisan OutputStream
, kelas iki asale saka InputStream
kelas abstrak. Kita bakal nulis sawetara baris teks ing file " test.txt " kita:
"So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters"

FileInputStream
:
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");
int i;
while((i=fileInputStream.read())!= -1){
System.out.print((char)i);
}
}
}
Kita maca siji bait saka file, ngowahi bait diwaca dadi karakter lan nampilake ing console. Lan iki output konsol:
So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters
Kelas BufferedInputStream
Aku, diwenehi kawruh saka pawulangan kepungkur, sampeyan bisa kanthi gampang ngomong apa kita kudu kelasBufferedInputStream
lan apa kaluwihan wis dibandhingake FileInputStream
:) Kita wis nemokke buffered stream, supaya nyoba kanggo guess (utawa elinga) sadurunge sampeyan terus maca :) Aliran buffered dibutuhake utamane kanggo ngoptimalake I / O. Ngakses sumber data, kayata maca saka file, iku operasi larang ing syarat-syarat kinerja Lan kanggo ngakses file kanggo maca saben byte boros. Mulane BufferedInputStream
maca data ora siji byte ing wektu, nanging ing pamblokiran, lan nyimpen kanggo sementara ing buffer khusus. Iki ngidini kita ngoptimalake program kanthi nyuda kaping pindho kita ngakses file kasebut. Ayo ndeleng kaya apa iki:
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, 200);
int i;
while((i = bufferedInputStream.read())!= -1){
System.out.print((char)i);
}
}
}
Ing kene kita nggawe BufferedInputStream
obyek. Konstruktor kasebut njupuk conto kelas InputStream
utawa turunane, mula FileInputStream
bakal ditindakake. Minangka argumen tambahan, butuh ukuran buffer ing bita. Thanks kanggo argumentasi iki, data saiki bakal diwaca saka file ora siji bait sekaligus, nanging 200 bait sekaligus! Bayangake sepira kita wis nyuda jumlah akses file. Kanggo mbandhingaké kinerja, sampeyan bisa njupuk file teks gedhe (sawetara megabyte teks) lan mbandhingaké suwene iku njupuk ing milliseconds diwaca lan output kanggo console nggunakake FileInputStream
lan BufferedInputStream
. Iki kode sing nduduhake loro opsi:
public class Main {
public static void main(String[] args) throws IOException {
Date date = new Date();
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\textBook.rtf");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
int i;
while((i = bufferedInputStream.read())!= -1){
System.out.print((char)i);
}
Date date1 = new Date();
System.out.println((date1.getTime() - date.getTime()));
}
}
public class Main {
public static void main(String[] args) throws IOException {
Date date = new Date();
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\26951280.rtf");
int i;
while((i = fileInputStream.read())!= -1){
System.out.print((char)i);
}
Date date1 = new Date();
System.out.println((date1.getTime() - date.getTime()));
}
}
Nalika maca file 1,5 MB ing komputer, FileInputStream
rampung karya ing ~ 3500 milliseconds, nanging BufferedInputStream
ngatur ing ~ 1700 milliseconds. Nalika sampeyan bisa ndeleng, stream buffer optimized karya, Cut ing setengah! :) Kita bakal terus sinau kelas I/O — nganti ketemu!
GO TO FULL VERSION