JavaRush /جاوا بلاگ /Random-SD /ڇا لاءِ پرنٽ اسٽريم ڪلاس آهي؟

ڇا لاءِ پرنٽ اسٽريم ڪلاس آهي؟

گروپ ۾ شايع ٿيل
سلام! اڄ اسان ڪلاس بابت ڳالهائينداسين PrintStream۽ اهو سڀ ڪجهه ڪري سگهي ٿو. ڇا لاءِ پرنٽ اسٽريم ڪلاس آهي - 1دراصل، توهان اڳ ۾ ئي واقف آهيو ڪلاس جي ٻن طريقن سان PrintStream. print()اهي ۽ طريقا آهن println()جيڪي توهان شايد هر روز استعمال ڪندا آهيو :) جيئن ته هڪ متغير System.outهڪ اعتراض آهي PrintStream، جڏهن توهان هڪ طريقو کي سڏيندا آهيو System.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-variable اتي ترتيب وار لکندو. ھتي آھن اسان جي فائل جو مواد پروگرام ھلڻ کان پوءِ:

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. ۽ اسان ڊيٽا کي پاس ڪريون ٿا جيڪي انهن هنڌن تي پيٽرولر جي طور تي هجن. اسان جي حالت ۾، هي اسٽرنگ آهي " اميگو " ۽ نمبر 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 spoofing

هن ليڪچر ۾ اسان ”فيٽ آف سسٽم“ ڪنداسين ۽ سيکارينداسين ته ڪيئن بدلجي ويريئبل System.in۽ سسٽم جي آئوٽ کي ان جاءِ تي ريڊائريڪٽ ڪيو جتي اسان کي ضرورت آهي. ڇا لاءِ پرنٽ اسٽريم ڪلاس آهي؟ - 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ڪيبورڊ سان "ڳنڍيل" آهي. پر اسان نٿا چاهيون ته ڊيٽا ڪيبورڊ مان پڙهي وڃي: ان کي پڙهڻ ڏيو متن جي باقاعده لائن مان! اسان هڪ اسٽرنگ ٺاهيو ۽ ان کي بائيٽ صف جي طور تي حاصل ڪيو. اسان کي بائيٽ جي ضرورت ڇو آهي؟ حقيقت اها آهي ته اهو 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