2011-12-13 21 views
12

से फ़ाइल प्राप्त करते समय यूआरआई पदानुक्रमित नहीं है मेरे पास एक क्लासपाथ में निर्देशिका के भीतर एक फ़ाइल है। ऐसा लगता है कि यह pl/shenlon/io/gui/appData/file.txt है। अब, जब मैं इसे एक फ़ाइल में बदल जाएंगे और इस कोड के साथ पढ़ने की कोशिश:त्रुटि: 'त्रुटि - java.lang.IllegalArgumentException: क्लासपाथ

File cityNamesFile = new File(ClassLoader.getSystemResource("pl/shenlon/io/gui/appData/list.txt").toURI()); 
Scanner cns = new Scanner(cityNamesFile); 

मैं निम्नलिखित मिल: -

error - java.lang.IllegalArgumentException: URI is not hierarchical.

मैं कैसे इस समस्या को ठीक कर सकते हैं?

+1

के साथ फ़ाइल का उपयोग करने की कोशिश की है cityNamesFile = नई फ़ाइल ("classpath: ")? – maks

उत्तर

7

यदि आपका बुला वर्ग पाठ फ़ाइल के रूप में एक ही पैकेज में ही है, बस का उपयोग करें:

InputStream is = getClass().getResourceAsStream("list.txt"); 
Scanner cns = new Scanner(is); 
+0

ठीक है, धन्यवाद। लेकिन अब मैं यूटीएफ 8 को भेजे गए डेटा के एन्कोडिंग को बदलना चाहता हूं। ऐसा कैसे किया जा सकता था? ठीक है, ऐसा किया। –

+1

स्कैनर का एक और कन्स्ट्रक्टर है जो एक इनपुटस्ट्रीम * और * और वर्णमाला नाम का उपयोग करने के लिए (स्ट्रिंग के रूप में) लेता है: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html# स्कैनर (java.io.InputStream,% 20java.lang.String) - तो बस इसके बजाय ऐसा करें: स्कैनर सीएनएस = नया स्कैनर (है, "यूटीएफ -8"); –

+0

thanx, मेरे दिन बचाया। –

6

File cityNamesFile = new File(ClassLoader.getSystemResource("pl/shenlon/io/gui/appData/list.txt").toURI()); 

बदलें

File cityNamesFile = new File(Thread.currentThread().getContextClassLoader().getResource("pl/shenlon/io/gui/appData/list.txt").getFile()); 
+3

केवल मेरे लिए ग्रहण में काम करता है, टर्मिनल – vemv

+0

से जार रन में नहीं, आप किस क्लासपाथ का उपयोग कर रहे हैं कमांड लाइन से? ग्रहण स्वचालित रूप से आपके लिए हैंडल करता है। – laz

+0

मैंने इसे कोई स्पष्ट क्लासपाथ सेट करने की कोशिश नहीं की, मैं टर्मिनल एमुलेटर से, 'java -jar xxx.jar' चलाता हूं, xxx.jar ग्रहण द्वारा निर्यात किया गया एक जार है। – vemv

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