JavaRush /Java Blog /Random-TW /PrintStream 類別的用途是什麼?

PrintStream 類別的用途是什麼?

在 Random-TW 群組發布
你好!今天我們將討論這個類別PrintStream以及它所能做的一切。 PrintStream 類別的用途是什麼? - 1實際上,您已經熟悉了該類別的兩個方法PrintStream。這些是您可能每天都會使用的print()和方法:) 由於變數是一個對象,因此當您呼叫方法時,您正在呼叫該特定類別的方法。 該類別的一般用途是將資訊輸出到某個流。 這個類別有幾個建構函數。以下是一些最常見的: println()System.outPrintStreamSystem.out.println()PrintStream
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) throws FileNotFoundException
  • PrintStream(String outputFileName) throws FileNotFoundException
正如你所看到的,我們可以傳入物件的建構函數PrintStream,例如,我們想要將資料輸出到的檔案的名稱。或者,對象本身File。讓我們透過範例來看看它是如何運作的:
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(如果該檔案尚不存在)並按boolean順序寫入我們的數字、字串和變數。以下是程式運行後文件的內容:

222
Hello world!
false
正如我們上面所說,沒有必要傳遞文件物件本身File。您只需要在建構函式中指定它的路徑:
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\\Евгений\\Desktop\\test.txt");

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

       printStream.printf("My name is %s, my age is %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, my age is %d!";

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

       PrintStream printStream = new PrintStream("C:\\Users\\Евгений\\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並將系統輸出重新導向到我們需要的地方。 PrintStream 類別的用途是什麼 - 2您可能已經忘記它是什麼System.in,但 JavaRush 學生不會忘記這個結構:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in(like 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 = "Hello! Меня зовут Амиго!\nЯ изучаю Java на сайте JavaRush.\nОднажды я стану крутым программистом!\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. 它很簡單,從名字就可以清楚地看出它是如何運作的:它的資料來源是一個位元組數組。因此,我們創建相同的位元組數組並將其傳遞給建構函數stream,構造函數將讀取資料。其實一切都已經準備好了!現在我們只需要使用該方法System.setIn()明確地設定變數的值in。在 的情況下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