JavaRush /Java Blog /Random-TL /Para saan ang klase ng PrintStream?

Para saan ang klase ng PrintStream?

Nai-publish sa grupo
Kamusta! Ngayon ay pag-uusapan natin ang tungkol sa klase PrintStreamat lahat ng magagawa nito. Para saan ang klase ng PrintStream? - 1Sa totoo lang, pamilyar ka na sa dalawang pamamaraan ng klase PrintStream. print()Ito ang mga at pamamaraan println()na malamang na ginagamit mo araw-araw :) Dahil ang variable System.outay isang object PrintStream, kapag tumawag ka ng method System.out.println(), tumatawag ka sa isang method ng partikular na klase na ito. Ang pangkalahatang layunin ng klase PrintStreamay maglabas ng impormasyon sa ilang stream. Ang klase na ito ay may ilang mga constructor. Narito ang ilan sa mga pinakakaraniwan:
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) throws FileNotFoundException
  • PrintStream(String outputFileName) throws FileNotFoundException
Tulad ng nakikita mo, maaari naming ipasa sa constructor ng object PrintStream, halimbawa, ang pangalan ng file kung saan gusto naming i-output ang data. O, bilang kahalili, ang bagay mismo File. Tingnan natin kung paano ito gumagana sa mga halimbawa:
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 lilikha ng isang file sa desktop test.txt(kung wala pa ito doon) at isulat ang aming numero, string at boolean-variable doon nang sunud-sunod. Narito ang mga nilalaman ng aming file pagkatapos tumakbo ang programa:

222
Hello world!
false
Tulad ng sinabi namin sa itaas, hindi kinakailangang ipasa ang mismong file object File. Kailangan mo lamang tukuyin ang landas dito 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);
   }
}
Gagawin ng code na ito ang katulad ng nauna. Ang isa pang kawili-wiling paraan upang tingnan ay ang , printf()o naka-format na output ng string. Ano ang ibig sabihin ng "formatted string"? Upang ipaliwanag, magbibigay ako 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\\Евгений\\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();

   }
}
Dito, sa halip na tahasang isulat ang pangalan at edad ng aming robot sa isang linya, tila nag-iiwan kami ng "libreng espasyo" para sa impormasyong ito gamit ang mga pointer %sat %d. At ipinapasa namin ang data na dapat nasa mga lugar na ito bilang mga parameter. Sa aming kaso, ito ang string na " Amigo " at ang numero 18. Maaari naming, halimbawa, lumikha ng isa pang espasyo: sabihin, %b, at ipasa ang isa pang parameter. Para saan ito? Una sa lahat, upang madagdagan ang kakayahang umangkop. Kung kailangan ng iyong program na madalas na magpakita ng welcome message, kakailanganin mong manu-manong ipasok ang kinakailangang teksto para sa bawat bagong robot. Ni hindi mo magagawang ilagay ang tekstong ito sa isang pare-pareho: ang mga pangalan at edad ng lahat ay iba-iba! Ngunit gamit ang bagong paraan, maaari kang mag-output ng isang string na may pagbati sa isang pare-pareho, at kung kinakailangan, baguhin lamang ang mga parameter sa pamamaraan 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.sa spoofing

Sa lecture na ito ay "lalabanan natin ang system" at matutunan kung paano palitan ang isang variable System.inat i-redirect ang output ng system sa lugar na kailangan natin. Para saan ang klase ng PrintStream - 2Maaaring nakalimutan mo kung ano ito System.in, ngunit walang mag-aaral ng JavaRush ang makakalimutan ang konstruksiyon na ito:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in(tulad ng System.out) ay isang static na variable ng klase System. Ngunit, hindi katulad ng System.out, kabilang ito sa ibang klase, ibig sabihin, sa InputStream. Bilang default System.in, ito ay isang thread na nagbabasa ng data mula sa system device—ang keyboard. Gayunpaman, tulad ng kaso sa System.out, maaari naming palitan ang data source, at ang pagbabasa ay magaganap hindi mula sa keyboard, ngunit mula sa lugar na kailangan namin! Tingnan natin ang isang halimbawa:
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);
       }

   }
}
So anong ginawa natin? Karaniwang System.in"nakatali" sa keyboard. Ngunit hindi namin nais na basahin ang data mula sa keyboard: hayaan itong basahin mula sa isang regular na linya ng teksto! Gumawa kami ng string at natanggap ito bilang byte array. Bakit kailangan natin ng mga byte? Ang katotohanan ay ito InputStreamay isang abstract na klase, at hindi kami makakalikha ng isang halimbawa nito. Kailangan mong pumili ng ilang klase mula sa mga tagapagmana nito. Halimbawa, maaari nating kunin ang ByteArrayInputStream. Ito ay simple, at sa pamamagitan lamang ng pangalan nito ay malinaw kung paano ito gumagana: ang data source nito ay isang byte array. Kaya gumawa kami ng parehong byte array at ipinapasa ito sa aming constructor stream, na magbabasa ng data. Sa katunayan, handa na ang lahat! Ngayon kailangan lang nating gamitin ang paraan System.setIn()upang tahasang itakda ang halaga ng variable in. Sa kaso ng out, gaya ng naaalala mo, malinaw na imposibleng itakda ang halaga ng variable alinman: kailangan mong gumamit ng isang espesyal na paraan setOut(). Pagkatapos naming italaga InputStreamang variable na ginawa namin System.in, kailangan naming suriin kung gumana ang aming ideya. Tutulungan tayo ng matandang kaibigan dito - BufferedReader. Sa isang normal na sitwasyon, ang code na ito ay magdudulot ng pagbukas ng console sa iyong Intellij IDEa, at ang data na iyong ipinasok mula sa keyboard ay mababasa mula doon.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
Ngunit kapag pinatakbo mo ito ngayon, makikita mo na ang aming teksto mula sa programa ay magiging output lamang sa console, walang pagbabasa mula sa keyboard. Binago namin ang data source, ngayon ay hindi ang keyboard, ngunit ang aming string! Napakadali at simple :) Sa lecture ngayon nakilala namin ang isang bagong klase at tumingin sa isang bagong maliit na "hack" para sa pagtatrabaho sa I/O. Oras na para bumalik sa kurso at lutasin ang ilang mga problema :) Magkita-kita tayo sa susunod na lecture!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION