CodeGym /จาวาบล็อก /สุ่ม /Java PrintStream คลาส
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 ตอนนี้ได้เวลากลับไปที่หลักสูตรและทำงานให้เสร็จ :) เจอกันในบทเรียนหน้า!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION