John Squirrels
ระดับ
San Francisco

Java PrintStream คลาส

เผยแพร่ในกลุ่ม
สวัสดี! วันนี้เราจะพูดถึงคลาส Java PrintStream และทุกสิ่งที่สามารถทำได้ จริงๆ แล้ว คุณคุ้นเคยกับสองเมธอดของคลาสPrintStream แล้ว พวกเขาคือprint()และprintln()ซึ่งคุณอาจใช้ทุกวัน :) เนื่องจาก ตัวแปร System.outเป็น วัตถุ PrintStreamคุณจึงเรียกหนึ่งในเมธอดของคลาสนี้เมื่อคุณเรียกSystem.out.println  () วัตถุประสงค์ทั่วไปของ คลาส PrintStreamคือการส่งข้อมูลไปยังบางสตรีม ทำไมเราต้องการคลาส PrintStream - 1คลาสนี้มีตัวสร้างหลายตัว นี่คือบางส่วนที่ใช้บ่อยที่สุด:
  • PrintStream (เอาท์พุตสตรีมเอาท์พุตสตรีม)
  • PrintStream (File outputFile) โยน FileNotFoundException
  • PrintStream (String outputFileName) โยน FileNotFoundException
ตัวอย่างเช่น เราสามารถส่งชื่อของไฟล์เอาต์พุตไปยังตัวสร้างPrintStream อีกทางหนึ่ง เราสามารถส่งวัตถุไฟล์ ลองดูตัวอย่างเพื่อดูว่ามันทำงานอย่างไร:
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);

   }
}
รหัสนี้จะสร้างไฟล์ test.txt บนเดสก์ท็อป (หากยังไม่มี) และเขียนหมายเลข สตริง และบูลีนลงไปตามลำดับ นี่คือเนื้อหาของไฟล์หลังจากที่เรารันโปรแกรม:
222
Hello world!
false
ดังที่เรากล่าวไว้ข้างต้น คุณไม่จำเป็นต้องส่งวัตถุไฟล์ เพียงแค่ส่งเส้นทางไฟล์ไปยังตัวสร้างก็เพียงพอแล้ว:
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);
   }
}
รหัสนี้ทำเหมือนกับรหัสก่อนหน้า อีกวิธีที่น่าสนใจที่ควรค่าแก่การให้ความสนใจคือprintf()ซึ่งสร้างเอาต์พุตตามสตริงรูปแบบ "สตริงรูปแบบ" คืออะไร ให้ฉันยกตัวอย่าง:
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();
   }
}
ที่นี่ แทนที่จะระบุ ชื่อ และอายุของหุ่นยนต์ของเราอย่างชัดเจนในสตริง เราใส่ตัวยึดตำแหน่งสำหรับข้อมูลนี้ ซึ่งแทนด้วย%sและ%d และเราส่งผ่านข้อมูลที่จะแทนที่เป็นอาร์กิวเมนต์ ในกรณีของเรา นี่คือสตริง " Amigo " และหมายเลข 18 เราสามารถสร้างตัวยึดตำแหน่งอื่น พูด%bและส่งอาร์กิวเมนต์อื่น ทำไมเราต้องการสิ่งนี้ เหนือสิ่งอื่นใดเพื่อความคล่องตัวที่มากขึ้น หากโปรแกรมของคุณต้องการให้แสดงข้อความต้อนรับบ่อยๆ คุณจะต้องพิมพ์ข้อความที่จำเป็นสำหรับหุ่นยนต์ใหม่แต่ละตัวด้วยตนเอง คุณไม่สามารถทำให้ข้อความนี้เป็นค่าคงที่ได้ เนื่องจากทุกคนมีชื่อและอายุต่างกัน! แต่การใช้เมธอดใหม่นี้ คุณสามารถแยกคำทักทายเป็นค่าคงที่ และถ้าจำเป็น ให้เปลี่ยนอาร์กิวเมนต์ที่ส่งไปยังเมธอด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();
   }
}

แทนที่ System.in

ในบทนี้ เราจะ "ต่อสู้กับระบบ" และเรียนรู้วิธีแทนที่ ตัวแปร System.inเพื่อเปลี่ยนเส้นทางเอาต์พุตของระบบไปยังทุกที่ที่เราต้องการ คุณอาจลืมว่าSystem.inคืออะไร แต่ไม่มีนักเรียน CodeGym คนไหนที่จะลืมโครงสร้างนี้:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (เช่นเดียวกับSystem.out ) เป็นตัวแปรคงที่ของคลาสSystem แต่ไม่เหมือนกับSystem.outมันอ้างอิงคลาสอื่นคือInputStream ตามค่าเริ่มต้นSystem.inคือสตรีมที่อ่านข้อมูลจากอุปกรณ์ระบบ ซึ่งก็คือแป้นพิมพ์ อย่างไรก็ตาม เช่นเดียวกับSystem.outเราสามารถแทนที่แป้นพิมพ์เป็นแหล่งข้อมูลได้ เราสามารถอ่านข้อมูลจากทุกที่ที่เราต้องการ! ลองดูตัวอย่าง:
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);
       }

   }
}
แล้วเราทำอะไร? โดยปกติแล้ว System.inจะเชื่อมโยงกับแป้นพิมพ์ แต่เราไม่ต้องการอ่านข้อมูลจากแป้นพิมพ์: มาอ่านข้อมูลจากสตริงธรรมดากันเถอะ! เราสร้างสตริงและได้รับเป็นอาร์เรย์ไบต์ ทำไมเราต้องการไบต์? สิ่งสำคัญคือInputStreamเป็นคลาสนามธรรม ดังนั้นเราจึงสร้างอินสแตนซ์ของมันโดยตรงไม่ได้ เราต้องเลือกหนึ่งในลูกหลานของมัน ตัวอย่างเช่น เราสามารถเลือกByteArrayInputStream มันเรียบง่าย แค่ชื่อก็บอกเราแล้วว่ามันทำงานอย่างไร แหล่งข้อมูลคืออาร์เรย์แบบไบต์ ดังนั้นเราจึงสร้างอาร์เรย์ไบต์และส่งต่อไปยังตัวสร้างสตรีมของเราที่จะอ่านข้อมูล และตอนนี้ทุกอย่างพร้อมแล้ว! ตอนนี้เราต้องใช้ System.setIn ()วิธีการกำหนดค่าของตัวแปรใน อย่างชัดเจน หากไม่มี outคุณจะจำได้ว่าเป็นไปไม่ได้ที่จะตั้งค่าของตัวแปรโดยตรง: เราต้องใช้เมธอดsetOut() หลังจากที่เรากำหนด InputStream ให้กับ ตัวแปร System.inแล้ว เราต้องการตรวจสอบว่าเราบรรลุวัตถุประสงค์หรือไม่ BufferedReaderเพื่อนเก่าของเรามาช่วยเราที่นี่ โดยปกติ รหัสนี้จะเปิดคอนโซลใน IntelliJ IDEA แล้วอ่านข้อมูลที่คุณป้อนจากแป้นพิมพ์
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
แต่เมื่อคุณเรียกใช้งาน คุณจะเห็นว่าสตริงของเราแสดงอยู่ในคอนโซล ไม่มีการอ่านจากแป้นพิมพ์ เราแทนที่แหล่งข้อมูล ไม่ใช่คีย์บอร์ดอีกต่อไป แต่เป็นสตริงของเรา! ง่ายมาก :) ในบทเรียนวันนี้ เราได้รู้จักชั้นเรียนใหม่และสำรวจแฮ็กใหม่เล็กน้อยสำหรับการทำงานกับ I/O ตอนนี้ได้เวลากลับไปที่หลักสูตรและทำงานให้เสร็จ :) เจอกันในบทเรียนหน้า!
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ