1. URLkelas

Kita wis sinau nggarap stream I/O. Kita wis sinau nggarap file. Apa sing kudu kita sinau sabanjure? Kepiye babagan nggarap jaringan, kalebu Internet? Muni janjeni, ora iku?

Ing Jawa, nggarap Internet ora luwih angel tinimbang nggarap file. Inggih, mbok menawi namung sekedhik.

Kanggo nggarap sumber daya Internet, Jawa nduweni kelas khusus — URL. Iku minangka prasaja minangka dhingklik, minangka saiki sampeyan bakal weruh.

Njupuk kaca web

Pira baris kode sampeyan mikir sampeyan kudu nulis kanggo ngundhuh sawetara file teks saka Internet lan nampilake isine ing layar? 10? 100? 1000? Utawa mungkin 5?

Kode Cathetan
URL url = new URL("https://codegym.cc");
InputStream input = url.openStream();
byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);
Nggawe obyek URL kanthi path menyang kaca
Entuk InputStreamsaka obyek URL
Maca kabeh bita lan ngasilake array bita
Ngonversi array menyang senar
Nampilake senar

Isi file HTML bakal ditampilake ing layar:

Output konsol
<!DOCTYPE html><html lang="ru" class="light"><head>
    <meta charset="utf-8″>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1″>
    ...

Mbandingaken nggarap FilelanURL

URLiku padha Fileutawa Path, nanging Pathnyimpen path menyang sumber ing sistem file, lan URLnyimpen path menyang sumber ing Internet.

Kabeh Piandel mengkono nalika kita njaluk InputStreamobyek thanks kanggo telpon siji kanggo openStream()cara. Iki minangka obyek biasa, lan kita wis sinau ing njero lan njaba. Kabeh dadi ketok sawise kita njaluk InputStreamobyek. Sawise kabeh, kita wis ngerti carane njaluk data saka iku.

Deleng: mung rong baris pisanan sing beda, lan mung rada. Lan saiki sampeyan bisa ndeleng - kauntungan saka standarisasi lan nggarap rantai aliran data:

Nggarap Internet Nggarap file
URL url = new URL("https://codegym.cc");
InputStream input = url.openStream();

byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);
File file = new File("c:\\readme.txt");
InputStream input = new FileInputStream(file);

byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);


2. URLConnectionkelas

Saliyane mung maca data saka Internet, kita uga bisa ngunggah data. Ngunggah data luwih rumit tinimbang maca. Sampeyan bakal mbutuhake sawetara cara liyane. Tuladhane:

Kode Cathetan
URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection();

// Get a stream for sending data
OutputStream output = connection.getOutputStream();
output.write(1); // Send data

// Get a stream for reading data
InputStream input = connection.getInputStream();
int data = input.read(); // Read data
Nggawe obyek URL kanthi path menyang kaca
Nggawe sambungan rong arah Entuk


stream output
Lebokake data


Entuk stream input
Waca data saka iku

Elinga yen kita ora nelpon maneh url.openStream()cara ing kene. Nanging, kita njupuk rute sing luwih dawa:

  • Kita pisanan nggawe sambungan rong arah sing stabil kanthi nggunakake URLConnection.openConnection()metode kasebut
  • Banjur kita entuk stream kanggo ngirim data nggunakake connection.getOutputStream()metode lan ngirim data menyang server
  • Banjur kita entuk stream kanggo maca data nggunakake connection.getInputStream()metode kasebut lan miwiti maca data saka iku.

Manajemen sumber daya

Tegese, kita kudu mbungkus kabeh aliran ing try-with-resourcesblok supaya bisa ditangani kanthi aman. Lan ora bakal natoni kanggo mbungkus gundhul InputStreamlan OutputStreamkanthi luwih trep. Contone, ing PrintStreamlan BufferedReader.

Yen kita nindakake kabeh, kode kita bakal katon kaya iki:

URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection();

// Send data
try (OutputStream output = connection.getOutputStream();
   PrintStream sender = new PrintStream(output))
{
   sender.println("Hello");
}

// Read data
try(InputStream input = connection.getInputStream();
   BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
   while (reader.ready())
      System.out.println(reader.readLine());
}

3. Conto nggarap jaringan

Ayo download soko saka Internet. Lan ora mung ngundhuh, nanging nyimpen menyang disk.

Contone, ayo nulis program sing nyimpen gambar saka homepage Google menyang disk.

Ing asas, ora ana sing rumit ing kene. Ing wangun sing paling gampang, kode iki bakal katon kaya iki:

Nyimpen file menyang disk
String image = "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
URL url = new URL(image);
InputStream input = url.openStream();

Path path = Path.of("c:\\GoogleLogo.png");
Files.copy(input, path);

Kanthi bantuan saka telung baris pisanan, kita nampa stream data saka sumber Internet - saka gambar.

Ing baris kaping papat, kita nggawe jeneng file sing bakal disimpen gambar kasebut. Jeneng bisa apa wae, nanging ekstensi file kudu cocog karo ekstensi gambar ing Internet. Sing bakal ngidini pamirso gambar lokal mbukak kanthi bener.

Lan pungkasane, baris pungkasan minangka salah sawijining metode Fileskelas copy. Kelas kasebut Filesduwe sawetara. Cara iki, sing digunakake, njupuk stream byte ( InputStream) minangka parameter pisanan, lan minangka parameter kapindho - jeneng file ing ngendi data kudu ditulis.

Secara teoritis, yen URLgambar kasebut cendhak, kode iki bisa uga ditulis ing baris siji:

Nyalin data saka stream menyang file
Files.copy(
   new URL("https://www.google.com/logo.png").openStream(),
   Path.of("c:\\GoogleLogo.png")
);

Mesthi, sampeyan ora kudu nulis kaya iki, nanging conto iki nuduhake carane trep lan kuat I / O stream ing Jawa.