CodeGym/Java Blog/अनियमित/जावा प्रिंटस्ट्रीम क्लास
John Squirrels
स्तर 41
San Francisco

जावा प्रिंटस्ट्रीम क्लास

अनियमित ग्रुप में प्रकाशित
सदस्य
नमस्ते! आज हम Java PrintStream क्लास और इसके द्वारा की जा सकने वाली हर चीज़ के बारे में बात करेंगे। वास्तव में, आप पहले से ही PrintStream क्लास के दो तरीकों से परिचित हैं। वे हैं Print() और Println() , जिनका आप शायद हर दिन उपयोग करते हैं :) क्योंकि System.out चर एक PrintStream ऑब्जेक्ट है, जब आप System.out.println() को कॉल करते हैं तो आप इस वर्ग के तरीकों में से एक को कॉल कर रहे हैं ।  प्रिंटस्ट्रीम क्लास का सामान्य उद्देश्य किसी स्ट्रीम को जानकारी भेजना है। हमें PrintStream क्लास की आवश्यकता क्यों है - 1इस क्लास में कई कंस्ट्रक्टर हैं। यहाँ कुछ सबसे अधिक उपयोग किए जाने वाले हैं:
  • प्रिंटस्ट्रीम (आउटपुटस्ट्रीम आउटपुटस्ट्रीम)
  • PrintStream (फ़ाइल आउटपुट फ़ाइल) FileNotFoundException को फेंकता है
  • प्रिंटस्ट्रीम (स्ट्रिंग आउटपुटफाइलनाम) FileNotFoundException फेंकता है
उदाहरण के लिए, हम आउटपुट फ़ाइल का नाम PrintStream कंस्ट्रक्टर को पास कर सकते हैं। वैकल्पिक रूप से, हम एक फाइल ऑब्जेक्ट पास कर सकते हैं। आइए कुछ उदाहरण देखें कि यह कैसे काम करता है:
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 वेरिएबल में असाइन करने के बाद, हम यह जांचना चाहते हैं कि हमने अपना उद्देश्य प्राप्त कर लिया है या नहीं। हमारे पुराने मित्र बफ़रेडरीडर यहाँ हमारी सहायता के लिए आते हैं। आम तौर पर, इस कोड ने IntelliJ IDEA में कंसोल खोला होगा और फिर आपके द्वारा कीबोर्ड से दर्ज किए गए डेटा को पढ़ा होगा।
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
लेकिन अब जब आप इसे चलाते हैं, तो आप देखेंगे कि हमारा स्ट्रिंग केवल कंसोल में प्रदर्शित होता है। कीबोर्ड से कोई रीडिंग नहीं है। हमने डेटा स्रोत को बदल दिया है। यह अब कीबोर्ड नहीं है, बल्कि हमारी स्ट्रिंग है! यह इतना आसान है :) आज के पाठ में, हमें एक नई कक्षा के बारे में पता चला और I/O के साथ काम करने के लिए एक छोटे से नए हैक की खोज की। अब पाठ्यक्रम पर लौटने और कुछ कार्यों को पूरा करने का समय आ गया है :) अगले पाठ में मिलते हैं!
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं