Hello! Kuliah dina iki bakal dipérang dadi rong bagéan. Kita bakal mbaleni sawetara topik lawas sing wis kita demek sadurunge, lan ndeleng sawetara fitur anyar :) Ayo dadi miwiti karo pisanan. Ambalan minangka ibu sinau :) Sampeyan wis nggunakake kelas kayata
BufferedReader
. Muga-muga sampeyan durung nglalekake prentah iki:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Sadurunge maca luwih lanjut, coba elinga apa System.in, InputStreamReader, BufferedReader
tanggung jawab saben komponen ( ) lan apa sing dibutuhake. Kedadeyan? Yen ora, aja padha sumelang :) Yen ing titik iki sampeyan wis lali soko, maca maneh ceramah iki khusus kanggo maca maneh. Ayo padha ngelingi kanthi ringkes apa sing bisa ditindakake saben wong. System.in
yaiku thread kanggo nampa data saka keyboard. Ing asas, kanggo ngleksanakake logika maca teks, siji bakal cukup kanggo kita. Nanging, yen sampeyan ngelingi, 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 mbukak kode iki lan ngetik huruf "Y" ing console, output bakal kaya iki:
Й
208
153
10
Karakter Cyrillic manggoni 2 bait ing memori, sing ditampilake ing layar (lan angka 10 minangka perwakilan bait saka break baris, yaiku pencet Ketik). Maca bait minangka kesenengan, mula nggunakake System.in
ing wangun murni bakal ora trep. Kanggo maca huruf Cyrillic (lan ora mung) sing bisa dingerteni kabeh wong, kita nggunakake InputStreamReader
minangka bungkus:
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);
}
}
}
Yen kita ngetik huruf sing padha "Y" menyang console, asil wektu iki bakal beda:
Й
1049
10
InputStreamReader
diowahi loro bait diwaca (208, 153) kanggo nomer siji 1049. Iki maca dening karakter. 1049 cocog karo huruf "Y", sing bisa diverifikasi kanthi gampang:
public class Main {
public static void main(String[] args) throws IOException {
char x = 1049;
System.out.println(x);
}
}
Output konsol:
Й
Dadi, kanggo BufferedReader
'a (lan umume - BufferedAnything), kelas buffered digunakake kanggo ngoptimalake kinerja. Ngakses sumber data (file, konsol, sumber daya ing Internet) minangka operasi sing rada larang babagan kinerja. Mulane, kanggo ngurangi jumlah panggilan kasebut, BufferedReader
maca lan nglumpukake data ing buffer khusus, saka ngendi kita bisa nampa. Akibaté, nomer telpon menyang sumber data suda kaping pirang-pirang utawa malah puluhan kaping! Fitur tambahan liyane saka BufferedReader
'a lan kauntungan saka biasa InputStreamReader
' iku cara banget migunani readLine()
sing maca data minangka kabèh strings tinimbang minangka nomer individu. Iki, mesthi, nemen nambah penak nalika ngleksanakake, contone, teks gedhe. Iki bakal katon kaya maca baris:
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("Пользователь ввел следующий текст:");
System.out.println(s);
reader.close();
}
}
BufferedReader+InputStreamReader работает быстрее, чем просто InputStreamReader
Пользователь ввел следующий текст:
BufferedReader+InputStreamReader работает быстрее, чем просто InputStreamReader
Mesthi, BufferedReader
iku mekanisme banget fleksibel lan ngijini sampeyan kanggo bisa ora mung karo keyboard. Sampeyan bisa maca data, contone, langsung saka Internet kanthi mung ngirim URL sing dibutuhake kanggo 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 menyang:
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();
}
}
Substitusi saka System.out
Saiki ayo goleki siji kemungkinan menarik sing durung dideleng sadurunge. Sing mbokmenawa elinga,System
ana rong lapangan statis ing kelas - System.in
lan System.out
. Sedulur kembar iki minangka obyek kelas benang. System.in
- kelas abstrak InputStream
. System.out
Kelas A. PrintStream
_ Saiki kita bakal ngomong khusus babagan System.out
. Yen kita pindhah menyang kode sumber kelas System
, kita bakal weruh iki:
public final class System {
……………...
public final static PrintStream out = null;
…………
}
Dadi, System.out
mung variabel kelas statis biasaSystem
. Ora ana sihir :) Variabel kasebut out
kalebu kelas PrintStream
. Mangkene pitakonan sing menarik: kenapa, nalika ngeksekusi kode, System.out.println()
output katon ing konsol lan ora ing papan liya? Lan iku bisa kanggo ngganti iki piye wae? Contone, kita pengin maca data saka console lan nulis menyang file teks. Apa bisa ngetrapake logika kasebut tanpa nggunakake kelas maca lan panulis tambahan, nanging mung nggunakake System.out
? Isih sabisa :) Lan sanajan variabel kasebut System.out
ditemtokake dening modifier final
, kita isih bisa nindakake! Dadi apa sing kita butuhake kanggo iki? Kaping pisanan , kita butuh obyek kelas anyar PrintStream
tinimbang sing saiki. Obyek saiki sing diinstal ing kelas System
minangka standar ora cocog karo kita: nuduhake console. Kita kudu nggawe anyar sing bakal nuding file teks minangka "tujuan" kanggo data kita. Kapindho , sampeyan kudu ngerti carane nemtokake nilai anyar menyang variabel System.out
. Sampeyan ora bisa nindakake kaya ngono, amarga wis ditandhani final
. Ayo miwiti saka pungkasan. Kelas System
ngemot persis cara sing kita butuhake - setOut()
. Butuh obyek minangka input PrintStream
lan nyetel minangka titik output. Mung apa kita kudu! Kabeh sing isih ana yaiku nggawe obyek kasebut PrintStream
. Iki uga gampang ditindakake:
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
Kabeh kode 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"));
/*Сохраним текущее meaning System.out в отдельную переменную, чтобы потом
можно было переключиться обратно на вывод в консоль*/
PrintStream console = System.out;
// Присваиваем System.out новое meaning
System.setOut(filePrintStream);
System.out.println("Эта строка будет записана в текстовый файл");
// Возвращаем System.out старое meaning
System.setOut(console);
System.out.println("А эта строка - в консоль!");
}
}
Akibaté, baris pisanan bakal ditulis menyang file teks, lan kaloro bakal output kanggo console :) Sampeyan bisa nyalin kode iki kanggo IDE lan mbukak. Kanthi mbukak file teks, sampeyan bakal weruh baris sing dibutuhake wis kasil ditulis ing kana :) Iki nyimpulake kuliah. Dina iki kita eling carane bisa karo stream lan nonton, ngelingi carane padha beda-beda saka saben liyane lan sinau babagan fitur-fitur anyar System.out
sing digunakake ing meh saben wulangan :) Sampai ketemu ing kuliah sabanjure!
GO TO FULL VERSION