JavaRush /Java блогы /Random-KK /PrintStream класы не үшін қажет?

PrintStream класы не үшін қажет?

Топта жарияланған
Сәлеметсіз бе! Бүгін біз сынып PrintStreamжәне оның жасай алатын барлық нәрселері туралы сөйлесеміз. PrintStream класы не үшін қажет? - 1Шын мәнінде, сіз сыныптың екі әдісімен бұрыннан таныссыз PrintStream. Бұл сіз күнде қолданатын әдістер :) Айнымалы мән an object болғандықтан print(), әдісті шақырған кезде , сіз осы нақты сыныптың әдісін шақырасыз. Класстың жалпы мақсаты - белгілі бір ағынға ақпаратты шығару. Бұл сыныпта бірнеше конструктор бар. Мұнда ең көп таралғандардың бірнешеуі берілген: println()System.outPrintStreamSystem.out.println()PrintStream
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) throws FileNotFoundException
  • PrintStream(String outputFileName) throws FileNotFoundException
Көріп отырғаныңыздай, біз нысанның конструкторына өте аламыз PrintStream, мысалы, деректерді шығарғымыз келетін файлдың атын. Немесе, балама ретінде, an objectінің өзі 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);
   }
}
Бұл code жұмыс үстелінде файл жасайды 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);
   }
}
Бұл code алдыңғы codeпен бірдей әрекет етеді. Қарауға болатын тағы бір қызықты әдіс - 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.spoofing

Бұл дәрісте біз «жүйемен күресеміз» және айнымалыны қалай ауыстыру керектігін System.inжәне жүйенің шығысын қажетті орынға қайта бағыттауды үйренеміз. PrintStream класы не үшін қажет - 2Сіз оның не екенін ұмытып кеткен боларсыз System.in, бірақ JavaRush бағдарламасының бірде-бір студенті бұл құрылысты ешқашан ұмытпайды:
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 = "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пернетақтаға «байланған». Бірақ біз деректердің пернетақтадан оқылғанын қаламаймыз: оны мәтіннің кәдімгі жолынан оқуға рұқсат етіңіз! Біз жолды жасап, оны byte массиві ретінде алдық. Неліктен бізге byteтар қажет? Бұл InputStreamдерексіз класс және біз оның данасын жасай алмаймыз. Сіз оның мұрагерлерінің ішінен қандай да бір сыныпты таңдауыңыз керек. Мысалы, біз аламыз ByteArrayInputStream. Бұл қарапайым және оның қалай жұмыс істейтіні оның атымен ғана түсінікті: оның деректер көзі - byte массиві. streamСондықтан біз дәл осы byte массивін жасаймыз және оны деректерді оқитын конструкторымызға береміз . Шын мәнінде, бәрі дайын! System.setIn()Енді бізге айнымалының мәнін нақты орнату әдісін қолдану керек in. Жағдайда out, есіңізде болса, айнымалының мәнін орнату да мүмкін емес еді: арнайы әдісті қолдану керек болды setOut(). InputStreamБіз жасаған айнымалыны тағайындағаннан кейін System.in, біздің идеяның жұмыс істегенін тексеруіміз керек. Бұл бізге ескі дос көмектеседі - BufferedReader. Қалыпты жағдайда бұл code Intellij IDEa ішінде консольдің ашылуына себеп болады және пернетақтадан енгізілген деректер сол жерден оқылады.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
Бірақ сіз оны қазір іске қосқан кезде, бағдарламадағы мәтін жай ғана консольге шығарылатынын көресіз, пернетақтадан оқу болмайды. Біз деректер көзін өзгерттік, енді бұл пернетақта емес, біздің жолымыз! Бұл өте оңай және қарапайым :) Бүгінгі дәрісте біз жаңа сыныппен таныстық және енгізу/шығарумен жұмыс істеуге арналған жаңа шағын «бұзуды» қарастырдық. Курсқа қайта оралу және кейбір мәселелерді шешу уақыты :) Келесі дәрісте кездескенше!
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION