CodeGym /Java Blog /यादृच्छिक /जावा प्रिंटस्ट्रीम वर्ग
John Squirrels
पातळी 41
San Francisco

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

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले
हाय! आज आपण जावा प्रिंटस्ट्रीम क्लास आणि ते करू शकत असलेल्या प्रत्येक गोष्टीबद्दल बोलू. वास्तविक, तुम्ही प्रिंटस्ट्रीम क्लासच्या दोन पद्धतींशी आधीच परिचित आहात . ते आहेत print() आणि println() , जे तुम्ही कदाचित दररोज वापरता :) कारण System.out व्हेरिएबल एक PrintStream ऑब्जेक्ट आहे, तुम्ही System.out.println() वर कॉल करता तेव्हा तुम्ही या वर्गाच्या पद्धतींपैकी एकाला कॉल करत आहात .  PrintStream वर्गाचा सामान्य उद्देश काही प्रवाहात माहिती पाठवणे हा आहे. आम्हाला प्रिंटस्ट्रीम वर्गाची गरज का आहे - 1या वर्गात अनेक कन्स्ट्रक्टर आहेत. येथे सर्वात सामान्यतः वापरल्या जाणार्या काही आहेत:
  • प्रिंटस्ट्रीम(आउटपुटस्ट्रीम आउटपुटस्ट्रीम)
  • प्रिंटस्ट्रीम(फाइल आउटपुटफाइल) फाईलनॉटफाऊंडएक्सेप्शन टाकते
  • प्रिंटस्ट्रीम(स्ट्रिंग आउटपुटफाइलनेम) फाईलनॉटफाऊंडएक्सेप्शन फेकते
उदाहरणार्थ, आम्ही आउटपुट फाइलचे नाव प्रिंटस्ट्रीम कन्स्ट्रक्टरला देऊ शकतो. वैकल्पिकरित्या, आपण फाइल ऑब्जेक्ट पास करू शकतो. हे कसे कार्य करते हे पाहण्यासाठी काही उदाहरणे पाहू या:

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 द्वारे प्रस्तुत केले जाते . आणि आम्ही युक्तिवाद म्हणून डेटा देतो जो त्यांना पुनर्स्थित करेल. आमच्या बाबतीत, ही स्ट्रिंग " 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. 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