CodeGym /جاوا بلاگ /Random-UR /جاوا پرنٹ اسٹریم کلاس
John Squirrels
سطح
San Francisco

جاوا پرنٹ اسٹریم کلاس

گروپ میں شائع ہوا۔
ہائے! آج ہم جاوا پرنٹ اسٹریم کلاس اور ہر اس چیز کے بارے میں بات کریں گے جو یہ کر سکتی ہے۔ دراصل، آپ پرنٹ اسٹریم کلاس کے دو طریقوں سے پہلے ہی واقف ہیں۔ وہ ہیں print() اور println() ، جنہیں آپ شاید ہر روز استعمال کرتے ہیں :) کیونکہ System.out متغیر ایک PrintStream آبجیکٹ ہے، جب آپ System.out.println() کو کال کرتے ہیں تو آپ اس کلاس کے طریقوں میں سے ایک کو کال کر رہے ہیں ۔  پرنٹ اسٹریم کلاس کا عمومی مقصد کسی سلسلے میں معلومات بھیجنا ہے۔ ہمیں پرنٹ اسٹریم کلاس کی ضرورت کیوں ہے - 1اس کلاس میں کئی کنسٹرکٹرز ہیں۔ یہاں سب سے زیادہ استعمال ہونے والے کچھ ہیں:
  • پرنٹ اسٹریم (آؤٹ پٹ اسٹریم آؤٹ پٹ اسٹریم)
  • پرنٹ اسٹریم (فائل آؤٹ پٹ فائل) فائل نوٹ فاؤنڈ ایکسپشن پھینک دیتی ہے۔
  • PrintStream(String outputFileName) FileNotFoundException پھینک دیتا ہے۔
مثال کے طور پر، ہم آؤٹ پٹ فائل کا نام پرنٹ اسٹریم کنسٹرکٹر کو دے سکتے ہیں۔ متبادل طور پر، ہم فائل آبجیکٹ کو پاس کر سکتے ہیں۔ آئیے کچھ مثالیں دیکھیں کہ یہ کیسے کام کرتا ہے:

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 فائل بنائے گا (اگر یہ پہلے سے موجود نہیں ہے) اور ترتیب وار اس پر ہمارا نمبر، سٹرنگ اور بولین لکھے گا۔ پروگرام چلانے کے بعد فائل کے مندرجات یہ ہیں:

222 
Hello world!
false
جیسا کہ ہم نے اوپر کہا، آپ کو فائل آبجیکٹ کو پاس کرنے کی ضرورت نہیں ہے ۔ فائل کا راستہ صرف کنسٹرکٹر کو منتقل کرنا کافی ہے۔

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\\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(); 
   } 
}
یہاں، سٹرنگ میں اپنے روبوٹ کا نام اور عمر واضح طور پر بتانے کے بجائے، ہم اس معلومات کے لیے پلیس ہولڈرز ڈالتے ہیں، جس کی نمائندگی %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. 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(); 
   } 
}

System.in کو تبدیل کرنا

اس سبق میں، ہم "سسٹم سے لڑیں گے" اور سیکھیں گے کہ کس طرح System.in متغیر کو بدلنا ہے تاکہ سسٹم آؤٹ پٹ کو جہاں چاہیں ری ڈائریکٹ کریں۔ آپ بھول سکتے ہیں کہ System.in کیا ہے، لیکن CodeGym کا کوئی طالب علم اس تعمیر کو کبھی نہیں بھولے گا:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (جیسے System.out ) سسٹم کلاس کا ایک جامد متغیر ہے۔ لیکن System.out کے برعکس ، یہ ایک اور کلاس کا حوالہ دیتا ہے، یعنی InputStream ۔ پہلے سے طے شدہ طور پر، System.in ایک سلسلہ ہے جو سسٹم ڈیوائس — کی بورڈ سے ڈیٹا پڑھتا ہے۔ تاہم، جس طرح System.out کے ساتھ ، ہم کی بورڈ کو ڈیٹا سورس کے طور پر تبدیل کر سکتے ہیں۔ ہم جہاں سے چاہیں ڈیٹا پڑھ سکتے ہیں! آئیے ایک مثال دیکھتے ہیں:

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); 
       } 

   } 
}
تو ہم نے کیا کیا؟ System.in عام طور پر کی بورڈ سے منسلک ہوتا ہے۔ لیکن ہم کی بورڈ سے ڈیٹا نہیں پڑھنا چاہتے: آئیے ڈیٹا کو ایک عام سٹرنگ سے پڑھا جائے! ہم نے ایک سٹرنگ بنائی اور اسے بائٹ اری کے طور پر حاصل کیا۔ ہمیں بائٹس کی ضرورت کیوں ہے؟ بات یہ ہے کہ InputStream ایک تجریدی کلاس ہے، لہذا ہم براہ راست اس کی مثال نہیں بنا سکتے۔ ہمیں اس کی اولاد میں سے کسی ایک کا انتخاب کرنا ہے۔ مثال کے طور پر، ہم منتخب کر سکتے ہیں ByteArrayInputStream ۔ یہ آسان ہے، اور اس کا نام ہی ہمیں بتاتا ہے کہ یہ کیسے کام کرتا ہے: اس کا ڈیٹا سورس ایک بائٹ سرنی ہے۔ لہذا ہم ایک بائٹ اری بناتے ہیں اور اسے اپنے اسٹریم کے کنسٹرکٹر کو دیتے ہیں جو ڈیٹا کو پڑھے گا۔ اور اب سب کچھ تیار ہے! اب ہمیں صرف System.setIn() طریقہ استعمال کرنے کی ضرورت ہے تاکہ ان متغیر کی قدر کو واضح طور پر سیٹ کیا جا سکے ۔ 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