Hi! Pawulangan ing dina iki bakal dipérang dadi rong bagéan kanggo penak. Kita bakal mbaleni sawetara topik lawas sing wis didemek sadurunge, lan kita bakal nimbang sawetara fitur anyar :) Ayo dadi miwiti karo pisanan. Sampeyan wis kelas kaya
Mesthi,
Dadi, apa sing kudu ditindakake supaya kedadeyan kasebut? Kaping pisanan, kita butuh
BufferedReader
kaping pirang-pirang. Muga-muga sampeyan ora duwe wektu kanggo nglalekake statement iki:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Sadurunge maca luwih, nyoba kanggo elinga apa saben komponen — System.in
, InputStreamReader
, BufferedReader
— tanggung jawab kanggo lan apa iku perlu. Kowe eling? Yen ora, ora kuwatir. :) Yen sampeyan wis lali soko, waca maneh pawulangan iki , kang darmabakti kanggo kelas maca. Kita bakal ngelingi kanthi ringkes apa sing bisa ditindakake saben wong. System.in
- iki minangka stream kanggo nampa data saka keyboard. Ing asas, mung cukup kanggo ngetrapake logika sing dibutuhake kanggo maca teks. Nanging, sing bakal kelingan, System.in
mung bisa maca bita, dudu karakter:
public class Main {
public static void main(String[] args) throws IOException {
while (true) {
int x = System.in.read();
System.out.println(x);
}
}
}
Yen kita nglakokaké kode iki lan ngetik huruf Cyrillic "Й", output bakal:
Й
208
153
10
Karakter Cyrillic manggoni 2 bait ing memori, lan padha ditampilake ing layar. Angka 10 minangka perwakilan desimal saka karakter feed baris, yaiku saka mencet Enter. Maca bita pancen nyenengake, mula nggunakake System.in
ora trep banget. Kanggo maca huruf Cyrillic (lan liyane) kanthi bener, kita nggunakake InputStreamReader
minangka pambungkus:
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(System.in);
while (true) {
int x = reader.read();
System.out.println(x);
}
}
}
Kita ngetik huruf sing padha "Й", nanging asile beda wektu iki:
Й
1049
10
InputStreamReader
diowahi loro bita (208 lan 153) kanggo nomer siji 1049. Iki apa tegese maca karakter. 1049 cocog karo huruf Cyrillic "Й". Kita bisa kanthi gampang ngyakinake awake dhewe yen iki bener:
public class Main {
public static void main(String[] args) throws IOException {
char x = 1049;
System.out.println(x);
}
}
Output konsol:
Й
Lan minangka forBufferedReader
(lan umume, BufferedAnythingYouWant
), kelas buffered digunakake kanggo ngoptimalake kinerja. Ngakses sumber data (file, konsol, sumber web) cukup larang babagan kinerja. Mulane, kanggo ngurangi jumlah akses, BufferedReader
maca lan nglumpukake data ing buffer khusus, lan kita entuk saka kono. Akibaté, kaping pirang-pirang sumber data diakses dikurangi - bisa uga kanthi pirang-pirang urutan gedhene! Liyane siji saka BufferedReader
's fitur lan kauntungan liwat biasa InputStreamReader
, punika readLine()
cara arang banget mbiyantu, kang maca kabeh baris data, ora nomer individu. Iki, mesthi, trep banget nalika nangani teks gedhe. Mangkene carane maca garis:
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
System.out.println ("The user entered the following text:");
System.out.println(s);
reader.close();
}
}
BufferedReader+InputStreamReader is faster than InputStreamReader alone
The user entered the following text:
BufferedReader+InputStreamReader is faster than InputStreamReader alone

BufferedReader
banget fleksibel. Sampeyan ora diwatesi kanggo nggarap keyboard. Contone, sampeyan bisa maca data langsung saka web, mung kanthi ngirim URL sing dibutuhake menyang maca:
public class URLReader {
public static void main(String[] args) throws Exception {
URL oracle = new URL("https://www.oracle.com/index.html");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
Sampeyan bisa maca data saka file kanthi ngliwati path file:
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream = new FileInputStream("testFile.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
String str;
while ((str = reader.readLine()) != null) {
System.out.println (str);
}
reader.close();
}
}
Ngganti System.out
Saiki ayo goleki kemampuan sing menarik sing durung didemek sadurunge. Nalika sampeyan mesthi ngelingi,System
kelas duwe rong lapangan statis - System.in
lan System.out
. Sedulur kembar iki minangka obyek stream. System.in
yaiku an InputStream
. Lan System.out
minangka PrintStream
. Saiki, kita bakal ngomong babagan System.out
. Yen kita nyelehake menyang System
kode sumber kelas, kita bakal weruh iki:
public final class System {
……………...
public final static PrintStream out = null;
…………
}
Mangkono, System.out
iku mung variabel statis biasa sakaSystem
kelas. Ora ana sing ajaib :) out
Variabel kasebut minangka PrintStream
referensi. Mangkene pitakonan sing menarik: Nalika System.out.println()
dieksekusi, kenapa persis output menyang konsol lan ora ing papan liya? Lan iki bisa diganti piye wae? Contone, umpamane kita pengin maca data saka konsol lan nulis menyang file teks. Apa bisa nindakake iki kanthi nggunakake System.out
tinimbang kelas maca lan panulis tambahan? Pancen, iku :) Lan kita bisa nindakake sanajan System.out
variabel kasebut ditandhani karo final
modifier! 
PrintStream
obyek anyar kanggo ngganti sing saiki. Obyek saiki, disetel ingSystem
kelas minangka standar, ora ngawula tujuan kita: nuduhake console. Sampeyan kudu nggawe sing anyar sing nuduhake file teks - "tujuan" kanggo data kita. Kapindho, kita kudu ngerti carane nemtokake nilai anyar menyang System.out
variabel. Sampeyan ora bisa nggunakake operator assignment prasaja, amarga variabel ditandhani final
. Ayo kerja mundur saka mburi. Minangka mengkono, System
kelas wis cara kita kudu setOut()
:. Butuh PrintStream
obyek lan nyetel minangka tujuan kanggo output. Iku mung sing kita butuhake! Kabeh sing isih ana yaiku nggawe PrintStream
obyek. Iki uga gampang:
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
Kode lengkap bakal katon kaya iki:
public class SystemRedirectService {
public static void main(String arr[]) throws FileNotFoundException
{
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
/* Save the current value of System.out in a separate variable so that later
we can switch back to console output */
PrintStream console = System.out;
// Assign a new value to System.out
System.setOut(filePrintStream);
System.out.println("This line will be written to the text file");
// Restore the old value of System.out
System.setOut(console);
System.out.println("But this line will be output to the console!");
}
}
Akibaté, senar pisanan ditulis ing file teks, lan kaloro ditampilake ing console :) Sampeyan bisa nyalin kode iki menyang IDE lan mbukak. Bukak file teks lan sampeyan bakal weruh yen senar wis kasil ditulis ing kono :) Kanthi iki, pelajaran kita wis rampung. Dina iki kita kelingan carane bisa karo stream lan maca. We recollected carane padha beda-beda saka siji liyane lan sinau bab sawetara kabisan anyar saka System.out
, kang wis digunakake ing meh saben pawulangan :) Nganti pawulangan sabanjuré!
Wacan liyane: |
---|
GO TO FULL VERSION