2012-10-23 15 views
6

संभव डुप्लिकेट:
Writing data to System.inजावा में System.in को मान कैसे असाइन करें?

हम जानते हैं कि System.in (मानक इनपुट) को सांत्वना से जुड़ा है। इसलिए जब भी हम कंसोल में लिखते हैं तो यह इस धारा में बह जाएगा। लेकिन कंसोल से प्रवेश किए बिना इस मानक इनपुट को मूल्य पारित करने का कोई तरीका है, यानी System.in = "ABCD" की तरह। मैं बस नकल करना चाहता हूं क्योंकि मूल्य कंसोल से गुजर रहा है।

+0

आप इसके साथ क्या करना चाहते हैं? मुझे कुछ ओडीडी लगता है। असल में आप System.in में क्या पढ़ते हैं और इसे असाइन नहीं करते हैं। –

उत्तर

13

हाँ, वहां है। System.setIn(InputStream in) का उपयोग करें।

आप, साथ ही InputStream के किसी भी उप-प्रकार की आपूर्ति कर सकते, इसलिए यदि आप एक विशिष्ट मूल्य की आपूर्ति करना चाहते हैं, तो आप StringBufferInputStream उपयोग कर सकते हैं तो जैसे:

StringBufferInputStream s = new StringBufferInputStream("ABCD"); 
System.setIn(s); 
+1

+1 हालांकि इसे 'सार्वजनिक अंतिम स्थैतिक इनपुट स्ट्रीम' –

+0

के रूप में घोषित किया गया है लेकिन यह एकाधिक धागे के लिए काम नहीं कर रहा है। मैंने System.setIn (s) को एक थ्रेड में इस्तेमाल किया और दूसरे धागे में मैं Scanner.nextLine() का उपयोग कर रहा हूं। जब मैं सिस्टम को मान देता हूं। एक थ्रेड से सेट करें, यह अन्य थ्रेड पर कोई प्रभाव नहीं डालता है जिसमें Scanner.nextLine() का उपयोग किया जाता है। क्या इसे कई धागे में काम करने का कोई तरीका है? – Angom

+2

जैसा कि मैंने इसे पढ़ा है, आपने पहले थ्रेड में पहले से ही 'System.in' को बदलकर * पहले थ्रेड में' स्कैनर 'बनाया है। स्कैनर के निर्माण के दौरान आपूर्ति की गई 'इनपुटस्ट्रीम' का संदर्भ होता है। यदि आप पहले धागे से 'System.setIn (...) 'को कॉल करेंगे * पहले थ्रेड में' स्कैनर 'बनाने से पहले, इसे बिना किसी समस्या के काम करना चाहिए। – mthmulders

0

मुझे लगता है कि बजाय अपने विधि सीधे पहुंच होने के System.in:

public void process() { 

    byte b[] = new byte[4000]; 
    int bytesRead = System.in.read(b); 

    ... 

} 

आपको लगता है कि बाहर कारक चाहिए, ताकि एक इनपुट स्ट्रीम विधि में पारित कर दिया गया है:

public void run() { 

    process(System.in); 

} 

public void process(InputStream is) { 

    byte b[] = new byte[4000]; 
    int bytesRead = is.read(b); 

    ... 

} 

यह आपको वही व्यवहार देता है, लेकिन आपको परीक्षण उद्देश्यों के लिए अपने स्वयं के विकास के इनपुट स्ट्रीम के साथ व्यापार तर्क भी आमंत्रित करने देता है।

संबंधित मुद्दे