CodeGym /Java Blog /Acak /Kelas Java PrintStream
John Squirrels
Level 41
San Francisco

Kelas Java PrintStream

Dipublikasikan di grup Acak
Hai! Hari ini kita akan berbicara tentang kelas Java PrintStream dan semua yang dapat dilakukannya. Sebenarnya, Anda sudah familiar dengan dua metode kelas PrintStream . Mereka adalah print() dan println() , yang mungkin Anda gunakan setiap hari :) Karena variabel System.out adalah objek PrintStream , Anda memanggil salah satu metode kelas ini saat Anda memanggil System.out.println() .  Tujuan umum dari kelas PrintStream adalah untuk mengirim informasi ke beberapa aliran. Mengapa kita membutuhkan kelas PrintStream - 1Kelas ini memiliki beberapa konstruktor. Berikut adalah beberapa yang paling umum digunakan:
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) melempar FileNotFoundException
  • PrintStream(String outputFileName) melempar FileNotFoundException
Misalnya, kita dapat meneruskan nama file keluaran ke konstruktor PrintStream . Alternatifnya, kita bisa melewatkan objek File . Mari kita lihat beberapa contoh untuk melihat cara kerjanya:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintStream; 

public class Main { 

   public static void main(String arr[]) throws FileNotFoundException 
   { 
       PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt")); 

       filePrintStream.println(222); 
       filePrintStream.println("Hello world"); 
       filePrintStream.println(false); 

   } 
}
Kode ini akan membuat file test.txt di desktop (jika belum ada) dan secara berurutan menulis nomor, string, dan boolean kita ke dalamnya. Berikut isi file setelah kita menjalankan program:

222 
Hello world!
false
Seperti yang kami katakan di atas, Anda tidak harus meneruskan objek File . Cukup dengan meneruskan jalur file ke konstruktor:

import java.io.FileNotFoundException; 
import java.io.PrintStream; 

public class Main { 

   public static void main(String arr[]) throws FileNotFoundException 
   { 
       PrintStream filePrintStream = new PrintStream("C:\\Users\\Username\\Desktop\\test.txt"); 

       filePrintStream.println(222); 
       filePrintStream.println("Hello world"); 
       filePrintStream.println(false); 
   } 
}
Kode ini melakukan hal yang sama dengan kode sebelumnya. Metode menarik lainnya yang patut kita perhatikan adalah printf() , yang menghasilkan output berdasarkan format string. Apa itu "format string"? Izinkan saya memberi contoh:

import java.io.IOException; 
import java.io.PrintStream; 

public class Main { 

   public static void main(String[] args) throws IOException { 

       PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt");

       printStream.println("Hello!"); 
       printStream.println("I'm a robot!"); 

       printStream.printf("My name is %s. I am %d!", "Amigo", 18); 

       printStream.close(); 
   } 
}
Di sini, alih-alih secara eksplisit menyatakan nama dan usia robot kami dalam string, kami menempatkan placeholder untuk informasi ini, yang diwakili oleh %s dan %d . Dan kami meneruskan sebagai argumen data yang akan menggantikannya. Dalam kasus kita, ini adalah string " Amigo " dan angka 18. Kita dapat membuat placeholder lain, misalnya %b , dan memberikan argumen lain. Kenapa kita perlu ini? Di atas segalanya, untuk fleksibilitas yang lebih besar. Jika program Anda mengharuskan Anda sering menampilkan pesan selamat datang, Anda harus mengetik teks yang diperlukan secara manual untuk setiap robot baru. Anda bahkan tidak dapat menjadikan teks ini sebagai konstanta, karena setiap orang memiliki nama dan usia yang berbeda! Namun dengan menggunakan metode baru ini, Anda dapat mengisolasi salam dalam sebuah konstanta dan, jika perlu, cukup mengubah argumen yang diteruskan ke metode printf() .

import java.io.IOException; 
import java.io.PrintStream; 

public class Main { 

   private static final String GREETINGS_MESSAGE = "My name is %s. I am %d!"; 

   public static void main(String[] args) throws IOException { 

       PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt"); 

       printStream.println("Hello!"); 
       printStream.println("We are robots!"); 


       printStream.printf(GREETINGS_MESSAGE, "Amigo", 18); 
       printStream.printf(GREETINGS_MESSAGE, "R2-D2", 35); 
       printStream.printf(GREETINGS_MESSAGE, "C-3PO", 35); 

       printStream.close(); 
   } 
} 

Mengganti System.in

Dalam pelajaran ini, kita akan "melawan sistem" dan mempelajari cara mengganti variabel System.in untuk mengarahkan keluaran sistem ke tempat yang kita inginkan. Anda mungkin lupa apa itu System.in , tetapi tidak ada siswa CodeGym yang akan melupakan konstruk ini:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (seperti System.out ) adalah variabel statis dari kelas System . Namun tidak seperti System.out , ia mereferensikan kelas lain, yaitu InputStream . Secara default, System.in adalah aliran yang membaca data dari perangkat sistem — keyboard. Namun, seperti halnya System.out , kita dapat mengganti keyboard sebagai sumber data. Kita dapat membaca data dari manapun kita mau! Mari kita lihat sebuah contoh:

import java.io.*; 

public class Main { 

   public static void main(String[] args) throws IOException { 

       String greetings = "Hi! My name is Amigo!\nI'm learning Java on the CodeGym website.\nOne day I will become a cool programmer!\n"; 
       byte[] bytes = greetings.getBytes(); 

       InputStream inputStream = new ByteArrayInputStream(bytes); 

       System.setIn(inputStream); 

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

       String str; 

       while ((str = reader.readLine())!= null) { 

           System.out.println(str); 
       } 

   } 
}
Jadi apa yang kami lakukan? System.in biasanya terikat ke keyboard. Tapi kami tidak ingin membaca data dari keyboard: biarkan data dibaca dari string biasa! Kami membuat string dan mendapatkannya sebagai array byte. Mengapa kita membutuhkan byte? Masalahnya adalah InputStream adalah kelas abstrak, jadi kita tidak bisa membuat turunannya secara langsung. Kita harus memilih salah satu keturunannya. Sebagai contoh, kita dapat memilih ByteArrayInputStream . Ini sederhana, dan namanya saja memberi tahu kita cara kerjanya: sumber datanya adalah array byte. Jadi kami membuat array byte dan meneruskannya ke konstruktor aliran kami yang akan membaca datanya. Dan sekarang semuanya sudah siap! Sekarang kita hanya perlu menggunakan System.setIn ()metode untuk secara eksplisit mengatur nilai dalam variabel . Dengan out , Anda ingat, juga tidak mungkin menyetel nilai variabel secara langsung: kita harus menggunakan metode setOut() . Setelah kami menetapkan InputStream kami ke variabel System.in , kami ingin memeriksa apakah kami telah mencapai tujuan kami. Teman lama kami BufferedReader datang membantu kami di sini. Biasanya, kode ini akan membuka konsol di IntelliJ IDEA dan kemudian membaca data yang Anda masukkan dari keyboard.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

       String str; 

       while ((str = reader.readLine())!= null) { 

           System.out.println(str); 
       }
Tetapi sekarang ketika Anda menjalankannya, Anda akan melihat bahwa string kami hanya ditampilkan di konsol. Tidak ada pembacaan dari keyboard. Kami mengganti sumber data. Ini bukan lagi keyboard, tapi string kita! Sesederhana itu :) Dalam pelajaran hari ini, kita mengenal kelas baru dan menjelajahi peretasan kecil baru untuk bekerja dengan I/O. Sekarang saatnya kembali ke kursus dan menyelesaikan beberapa tugas :) Sampai jumpa di pelajaran berikutnya!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION