2012-03-13 17 views
12

मैं नेटबीन्स और मेवेन के साथ आवेदन विकसित कर रहा हूं। मेरा आवेदन stdin से डेटा प्राप्त करना चाहिए। लेकिन मैं समझ नहीं पाया कि इसका परीक्षण कैसे किया जाए। तर्क सूची में < data.txt डालकर काम नहीं करता है।क्या Netbeans में फ़ाइल से stdin में इनपुट रीडायरेक्ट करने का कोई तरीका है?

$ java MyProgram < data.txt 
+0

आप इनपुट के रूप में stdin का उपयोग क्यों करते हैं और न केवल एक पैरामीटर जो फ़ाइल तक पहुंचता है? – khmarbaise

+0

@khmarbaise माता-पिता से बच्चे की प्रक्रिया में लिखना/पढ़ना तेज़ है: फ़ाइल/बंद फ़ाइल/रन प्रक्रिया/खुली फ़ाइल/फ़ाइल/बंद फ़ाइल से पढ़ने के लिए फ़ाइल/फ़ाइल खोलें। मेरे परिदृश्य के साथ मैं फाइल सिस्टम प्रदर्शन पर निर्भर नहीं हूं और मैं धारा से पढ़ सकता हूं जबकि मूल प्रक्रिया इसे लिख रही है ... – denys

उत्तर

6

यह आपके प्रोजेक्ट की build.xml फ़ाइल में अपना खुद का रन लक्ष्य जोड़कर किया जा सकता है।

<target name="run" depends="jar"> 
    <exec dir="${work.dir}" executable="java" input="${work.dir}/inputfile.txt"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

ध्यान दें कि इस तरह के भागो, डीबग के रूप में आदेश, और अगर सुविधा सहेजें पर संकलित परियोजना के लिए बंद कर दिया है टेस्ट केवल अपने कस्टम build.xml का उपयोग करें: उदाहरण के लिए। इसलिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि सहेजें पर संकलन आपके प्रोजेक्ट के गुणों में बंद हो गया है।

+0

मुझे आश्चर्य है कि इस काम को पाने के लिए 'सहेजें पर संकलन' क्यों बंद कर दिया जाना चाहिए? –

10

मुझे लगता है आप की तरह एक बात है:: यह आपके आवेदन करने के लिए एक प्रवेश बिंदु के रूप में इस्तेमाल कर सकते हैं

public static void main(String[] args) { 
... 
} 

और कहा कि इससे पहले कि आप इनपुट चैनल बदल

मैं एक ही रूप में की जरूरत है के माध्यम से:

FileInputStream is = new FileInputStream(new File("test.data")); 
System.setIn(is); 

उपर्युक्त इकाई/एकीकरण परीक्षण के भीतर उपयोग किया जा सकता है।

+0

यह @ ज़ीरो टौउ समाधान –

+0

की तुलना में कहीं अधिक विश्वसनीय है लेकिन यह मुझे डरने वाले कोड के फ़ंक्शन को बदल देगा - यानी परिणाम प्रोग्राम जब मानक इनपुट स्ट्रीम की बजाय 'test.data' फ़ाइल से इनपुट पढ़ेगा। –

1

मुझे यकीन नहीं है कि यह नेटबीन में कैसा है लेकिन ग्रहण में आप कंसोल पर कुछ लिख सकते हैं और इसे एप्लिकेशन चलाने के लिए एसटीडीआईएन के रूप में रीडायरेक्ट किया जाता है। मेरा मानना ​​है कि इसे नेटबीन में भी काम करना चाहिए। तो, बस अपना आवेदन चलाएं, फिर कंसोल के लिए data.txt की सामग्री कॉपी/पेस्ट करें और शायद <ENTER> दबाएं।

तो कुछ भी नहीं है मदद उपयोग दूरस्थ डीबगिंग, अर्थात निम्नलिखित के रूप में कमांड प्रॉम्प्ट से अपने कार्यक्रम चलाने:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y MyProgram < data.txt

तो NetBeans से इस प्रक्रिया से कनेक्ट।

+0

आप वह हैं जो मेरे प्रश्न को समझते हैं। लेकिन दुर्भाग्यवश ऐसे शैल स्ट्रिग नेटबीन्स में काम नहीं करते हैं :( – denys

1

पुराना स्कूल, लेकिन यह मुझे पता था। एक चेतावनी यह है कि एमवीएन कमांड क्ली में वापस नहीं आता है, लेकिन कुछ उद्देश्यों के लिए यह स्वीकार्य है। नोट: आपको प्रोजेक्ट रूट निर्देशिका

mvn "-Dexec.args = -classpath% classpath com.mycompany.test" -Dexec.executable =/डाउनलोड/jdk1.7/bin/java exec-maven- प्लगइन: 1.2.1: निष्पादन </tmp/इनपुट

0

निम्न पाठ के साथ Files-> build.xml के तहत एक नया लक्ष्य "रन-इनपुट" जोड़ें। नोट: यह संस्करण जावा रनटाइम के सही स्थान का उपयोग करता है। साथ ही, यह मानता है कि आपने फ़ाइल इनपुट 1 के साथ इनपुट नामक निर्देशिका बनाई है।

<target name="run-input" depends="jar"> 
    <exec dir="${work.dir}" executable="${java.home}/bin/java" input="${src.dir}/inputs/input1"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

आप हमेशा इस नए लक्ष्य के लिए शॉर्टकट बना सकते हैं।

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

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