CodeGym/Blog Java/rawak/Kelas Java PrintStream
John Squirrels
Tahap
San Francisco

Kelas Java PrintStream

Diterbitkan dalam kumpulan
Hai! Hari ini kita akan bercakap tentang kelas Java PrintStream dan semua yang boleh dilakukannya. Sebenarnya, anda sudah biasa dengan dua kaedah kelas PrintStream . Ia adalah print() dan println() , yang mungkin anda gunakan setiap hari :) Oleh kerana pembolehubah System.out ialah objek PrintStream , anda memanggil salah satu kaedah kelas ini apabila anda memanggil System.out.println() .  Tujuan umum kelas PrintStream adalah untuk menghantar maklumat kepada beberapa aliran. Mengapa kita memerlukan kelas PrintStream - 1Kelas ini mempunyai beberapa pembina. Berikut adalah beberapa yang paling biasa digunakan:
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) membuang FileNotFoundException
  • PrintStream(String outputFileName) membuang FileNotFoundException
Sebagai contoh, kita boleh menghantar nama fail output kepada pembina PrintStream . Sebagai alternatif, kita boleh lulus objek Fail . Mari lihat beberapa contoh untuk melihat cara ini berfungsi:
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);

   }
}
Kod ini akan mencipta fail test.txt pada desktop (jika ia belum wujud) dan menulis nombor, rentetan dan boolean kami secara berurutan padanya. Berikut ialah kandungan fail selepas kami menjalankan program:
222
Hello world!
false
Seperti yang kami katakan di atas, anda tidak perlu lulus objek Fail . Ia cukup untuk menghantar laluan fail kepada pembina:
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);
   }
}
Kod ini melakukan perkara yang sama seperti kod sebelumnya. Kaedah menarik lain yang patut kita perhatikan ialah printf() , yang menghasilkan output berdasarkan rentetan format. Apakah "rentetan format"? Biar saya beri 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, daripada menyatakan secara eksplisit nama dan umur robot kami dalam rentetan, kami meletakkan ruang letak untuk maklumat ini, diwakili oleh %s dan %d . Dan kami lulus sebagai hujah data yang akan menggantikannya. Dalam kes kami, ini ialah rentetan " Amigo " dan nombor 18. Kami boleh mencipta ruang letak lain, katakan %b , dan lulus hujah lain. Mengapa kita memerlukan ini? Di atas semua, untuk fleksibiliti yang lebih besar. Jika program anda memerlukan anda untuk memaparkan mesej alu-aluan dengan kerap, anda perlu menaip secara manual teks yang diperlukan untuk setiap robot baharu. Anda tidak boleh menjadikan teks ini tetap, kerana setiap orang mempunyai nama dan umur yang berbeza! Tetapi menggunakan kaedah baharu ini, anda boleh mengasingkan ucapan dalam pemalar dan, jika perlu, cuma tukar argumen yang dihantar kepada kaedah 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();
   }
}

Menggantikan System.in

Dalam pelajaran ini, kita akan "melawan sistem" dan belajar cara menggantikan pembolehubah System.in untuk mengubah hala keluaran sistem ke mana-mana yang kita mahu. Anda mungkin lupa apa itu System.in , tetapi tiada pelajar CodeGym akan melupakan konstruk ini:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (sama seperti System.out ) ialah pembolehubah statik bagi kelas Sistem . Tetapi tidak seperti System.out , ia merujuk kelas lain, iaitu InputStream . Secara lalai, System.in ialah strim yang membaca data daripada peranti sistem — papan kekunci. Walau bagaimanapun, sama seperti System.out , kita boleh menggantikan papan kekunci sebagai sumber data. Kita boleh membaca data dari mana sahaja kita mahu! Mari lihat 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 kita buat? System.in biasanya terikat pada papan kekunci. Tetapi kami tidak mahu membaca data dari papan kekunci: mari kita membaca data daripada rentetan biasa! Kami mencipta rentetan dan mendapatkannya sebagai tatasusunan bait. Mengapa kita memerlukan bait? Masalahnya ialah InputStream ialah kelas abstrak, jadi kami tidak boleh mencipta contoh secara langsung. Kita perlu memilih salah satu daripada keturunannya. Sebagai contoh, kita boleh memilih ByteArrayInputStream . Ia mudah, dan namanya sahaja memberitahu kami cara ia berfungsi: sumber datanya ialah tatasusunan bait. Jadi kami mencipta tatasusunan bait dan menyerahkannya kepada pembina aliran kami yang akan membaca data. Dan kini semuanya sudah siap! Sekarang kita hanya perlu menggunakan System.setIn ()kaedah untuk menetapkan nilai pembolehubah dalam secara eksplisit . Dengan out , anda akan ingat, ia juga tidak mungkin untuk menetapkan nilai pembolehubah secara langsung: kami terpaksa menggunakan kaedah setOut() . Selepas kami menetapkan InputStream kami kepada pembolehubah System.in , kami ingin menyemak sama ada kami telah mencapai tujuan kami. Rakan lama kami BufferedReader datang membantu kami di sini. Biasanya, kod ini akan membuka konsol dalam IntelliJ IDEA dan kemudian membaca data yang anda masukkan daripada papan kekunci.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
Tetapi sekarang apabila anda menjalankannya, anda akan melihat bahawa rentetan kami hanya dipaparkan dalam konsol. Tiada bacaan dari papan kekunci. Kami menggantikan sumber data. Ia bukan lagi papan kekunci, tetapi rentetan kami! Semudah itu :) Dalam pelajaran hari ini, kami mengenali kelas baharu dan meneroka hack baharu yang kecil untuk bekerja dengan I/O. Kini tiba masanya untuk kembali ke kursus dan menyelesaikan beberapa tugasan :) Jumpa anda dalam pelajaran seterusnya!
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi