CodeGym/Java Blog/Random/Java PrintStream Class
John Squirrels
Antas
San Francisco

Java PrintStream Class

Nai-publish sa grupo
Hi! Ngayon ay pag-uusapan natin ang tungkol sa klase ng Java PrintStream at lahat ng magagawa nito. Sa totoo lang, pamilyar ka na sa dalawang pamamaraan ng klase ng PrintStream . Ang mga ito ay print() at println() , na malamang na ginagamit mo araw-araw :) Dahil ang System.out variable ay isang PrintStream object, tinatawagan mo ang isa sa mga pamamaraan ng klase na ito kapag tinawagan mo ang System.out.println() .  Ang pangkalahatang layunin ng klase ng PrintStream ay magpadala ng impormasyon sa ilang stream. Bakit kailangan natin ang klase ng PrintStream - 1Ang klase na ito ay may ilang mga constructor. Narito ang ilan sa mga pinakakaraniwang ginagamit:
  • PrintStream(OutputStream outputStream)
  • Inihagis ng PrintStream(File outputFile) ang FileNotFoundException
  • Inihagis ng PrintStream(String outputFileName) ang FileNotFoundException
Halimbawa, maaari naming ipasa ang pangalan ng output file sa PrintStream constructor. Bilang kahalili, maaari tayong magpasa ng isang File object. Tingnan natin ang ilang halimbawa upang makita kung paano ito gumagana:
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);

   }
}
Ang code na ito ay gagawa ng test.txt file sa desktop (kung wala pa ito) at sunud-sunod na isusulat ang aming numero, string, at boolean dito. Narito ang mga nilalaman ng file pagkatapos naming patakbuhin ang programa:
222
Hello world!
false
Tulad ng sinabi namin sa itaas, hindi mo kailangang ipasa ang isang File object. Ito ay sapat na upang ipasa lamang ang landas ng file sa tagabuo:
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);
   }
}
Ang code na ito ay pareho sa nakaraang code. Ang isa pang kawili-wiling paraan na nagkakahalaga ng ating pansin ay printf() , na gumagawa ng output batay sa isang format na string. Ano ang "format string"? Hayaan akong magbigay ng isang halimbawa:
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();
   }
}
Dito, sa halip na tahasang sabihin ang pangalan at edad ng aming robot sa string, naglalagay kami ng mga placeholder para sa impormasyong ito, na kinakatawan ng %s at %d . At ipinapasa namin bilang mga argumento ang data na papalit sa kanila. Sa aming kaso, ito ang string na " Amigo " at ang numero 18. Maaari kaming lumikha ng isa pang placeholder, sabihin %b , at magpasa ng isa pang argumento. Bakit kailangan natin ang mga ito? Higit sa lahat, para sa higit na kakayahang umangkop. Kung hinihiling sa iyo ng iyong programa na magpakita ng isang welcome message nang madalas, kailangan mong manu-manong i-type ang kinakailangang teksto para sa bawat bagong robot. Hindi mo maaaring gawing pare-pareho ang tekstong ito, dahil ang lahat ay may iba't ibang pangalan at edad! Ngunit gamit ang bagong pamamaraang ito, maaari mong ihiwalay ang pagbati sa isang pare-pareho at, kung kinakailangan, baguhin lamang ang mga argumentong ipinasa sa printf() na paraan.
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();
   }
}

Pinapalitan ang System.in

Sa araling ito, "lalabanan natin ang system" at matututunan natin kung paano palitan ang variable ng System.in upang mai-redirect ang output ng system sa kahit saan natin gusto. Maaaring makalimutan mo kung ano ang System.in , ngunit walang mag-aaral ng CodeGym ang makakalimutan ang construct na ito:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Ang System.in  (tulad ng System.out ) ay isang static na variable ng klase ng System . Ngunit hindi tulad ng System.out , ito ay tumutukoy sa isa pang klase, katulad ng InputStream . Bilang default, ang System.in ay isang stream na nagbabasa ng data mula sa isang system device — ang keyboard. Gayunpaman, tulad ng sa System.out , maaari naming palitan ang keyboard bilang pinagmumulan ng data. Mababasa natin ang data saan man natin gusto! Tingnan natin ang isang halimbawa:
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);
       }

   }
}
So anong ginawa natin? Karaniwang nakatali ang System.in sa keyboard. Ngunit hindi namin nais na basahin ang data mula sa keyboard: hayaan nating basahin ang data mula sa isang ordinaryong string! Gumawa kami ng isang string at nakuha ito bilang isang byte array. Bakit kailangan natin ng mga byte? Ang bagay ay ang InputStream ay isang abstract na klase, kaya hindi kami makakagawa ng isang instance nito nang direkta. Kailangan nating pumili ng isa sa mga inapo nito. Halimbawa, maaari naming piliin ang ByteArrayInputStream . Ito ay simple, at ang pangalan lamang nito ang nagsasabi sa amin kung paano ito gumagana: ang data source nito ay isang byte array. Kaya gumawa kami ng byte array at ipapasa ito sa constructor ng aming stream na magbabasa ng data. At ngayon handa na ang lahat! Ngayon kailangan lang nating gamitin ang System.setIn()paraan upang tahasang itakda ang halaga ng in variable. Kung ang out , maaalala mo, hindi rin posible na direktang itakda ang halaga ng variable: kailangan naming gamitin ang setOut() na paraan. Pagkatapos naming italaga ang aming InputStream sa System.in variable, gusto naming suriin kung nakamit namin ang aming layunin. Ang aming matandang kaibigan na BufferedReader ay tumulong sa amin dito. Karaniwan, ang code na ito ay magbubukas ng console sa IntelliJ IDEA at pagkatapos ay basahin ang data na iyong ipinasok mula sa keyboard.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
Ngunit ngayon kapag pinatakbo mo ito, makikita mo na ang aming string ay ipinapakita lamang sa console. Walang pagbabasa mula sa keyboard. Pinalitan namin ang data source. Ito ay hindi na ang keyboard, ngunit ang aming string! Ganyan kasimple :) Sa aralin ngayon, nakilala namin ang isang bagong klase at nag-explore ng isang maliit na bagong hack para sa pagtatrabaho sa I/O. Ngayon ay oras na upang bumalik sa kurso at kumpletuhin ang ilang mga gawain :) Magkita-kita tayo sa susunod na aralin!
Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito