2012-02-03 15 views
6

में व्हाइटस्पेस के साथ फ़ाइल पढ़ें, मैं FileInputStream के साथ फ़ाइलों को खोलने की कोशिश कर रहा हूं जिनमें उनके नामों में सफेद स्थान हैं।जावा पथ को अपने पथ

उदाहरण के लिए:

String fileName = "This is my file.txt"; 
String path = "/home/myUsername/folder/"; 

String filePath = path + filename; 
f = new BufferedInputStream(new FileInputStream(filePath)); 

नतीजा यह है कि एक FileNotFoundException फेंक दिया जा रहा है। मैंने फ़ाइलपैथ को "/home/myUserName/folder/This\\ is\\ my\\ file.txt" पर हार्डकोड करने का प्रयास किया ताकि यह देखने के लिए कि मुझे व्हाइटस्पेस वर्णों से बचना चाहिए और यह काम नहीं कर रहा था। इस मामले पर कोई सुझाव?

संपादित करें: इस प्रश्न को देखने वाले सभी लोगों के साथ एक ही पृष्ठ पर रहना ... इसके नाम पर व्हाइटस्पेस के बिना फ़ाइल खोलना, जिसकी सफेद जगहें विफल हो जाती हैं। अनुमतियां यहां समस्या नहीं हैं और न ही फ़ोल्डर विभाजक हैं।

+0

संभव उनके रास्ते में रिक्तियों के बिना http://stackoverflow.com/questions/5358850/accessing-files-with-spaces-in-filename-from-java –

उत्तर

3

फ़ाइल का नाम हमेशा किसी भी समस्या

रास्ते में
+0

मुझे यह दिखाने के लिए धन्यवाद कि मुझे फ़ाइल इनपुट (पथ) को फ़ाइलइनपुटस्ट्रीम पर भेजने से पहले इसका उपयोग करना होगा। – user253530

+0

@ user253530: क्या आप यह कह रहे हैं कि आपका मूल कोड काम नहीं करता है, और 'फ़ाइलपैथ' को 'फ़ाइल()' में लपेटकर इसे काम करता है ?! – NPE

+1

हाँ ... अगर मैं FileInputStream (स्ट्रिंग फ़ाइलपैथ) का उपयोग करता हूं तो यह काम नहीं करता है .... लेकिन अगर मैं पहले फ़ाइल f = नई फ़ाइल (filePath) करता हूं और फिर FileInputStream (f) कोई त्रुटि नहीं फेंकता है ... बहुत अजीब .. – user253530

0

नहीं, आपको सफेद जगहों से बचने की आवश्यकता नहीं है।

यदि कोड FileNotFoundException फेंकता है, तो फ़ाइल मौजूद नहीं है (या, शायद, आपको इसे एक्सेस करने के लिए आवश्यक अनुमतियों की कमी है)।

यदि अनुमतियां ठीक हैं, और आपको लगता है कि फ़ाइल मौजूद है, तो सुनिश्चित करें कि इसे जिसे आप सोचते हैं उसे कहा जाता है। विशेष रूप से, सुनिश्चित करें कि फ़ाइल नाम में कोई गैर-प्रिंट करने योग्य वर्ण नहीं हैं, अनजान अग्रणी या पिछली सफेद जगह आदि। इसके लिए, ls -b सहायक हो सकता है।

+0

फ़ाइलों की डुप्लिकेट ठीक है, मैं उन्हें खोल सकता हूं ... इसलिए अनुमतियां समस्या नहीं प्रतीत होती हैं :( – user253530

+1

@ user253530: हमें 'ls -l' से आउटपुट दिखाएं जो फ़ाइल में प्रश्न सूचीबद्ध करता है। – NPE

+0

-rw-r - r-- 1 रूट रूट 101 2012-02-03 11:16 add.txt -rw-r-r-- 1 रूट रूट 13 9 6 9 2012-02-02 20:23 केस 1 ए। txt प्रत्येक व्यक्ति ने अनुमतियां पढ़ी हैं ... यह समस्या नहीं है ... मैं add.txt खोल सकता हूं लेकिन मैं CASE 1A.txt नहीं खोल सकता ... यह नाम है कि मुझे यकीन है कि – user253530

1

ऐसा लगता है कि आपके फ़ाइल नामों में व्हाइटस्पेस की तुलना में फ़ाइल विभाजक के साथ आपको कोई समस्या है। क्या आपने

System.getProperty("file.separator") 

पथ चर में अपने '/' के बजाय उपयोग करने का प्रयास किया है? अंतरिक्ष के साथ

+0

नवीनतम संपादन पढ़ें – user253530

+0

अपने सफेद जगह से बचें नहीं, मुझे विश्वास है कि आप enix जैसे linix/linux पर हैं। यदि यह काम नहीं करता है तो आप कुछ और गलत कर रहे हैं उदाहरण के लिए। फ़ाइल नाम गलत तरीके से गलत करना या अन्यथा – Kris

-1

आम तौर पर खाली स्थान के कोई फर्क should't बिना ठीक

यहाँ मेरी कोड

File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties"); 
     System.out.println(f.exists()); 
     try 
     { 
      FileInputStream stream = new FileInputStream(f); 
     } 
     catch (FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 

f.exists() रिटर्न true है काम करता है। बस सुनिश्चित करें कि जब आप बाहरी स्रोत से पथ गुजर रहे हैं (कमांड लाइन) की तरह बनाने के लिए, कि यह अंत में खाली स्थान के शामिल नहीं है:

File file = new File(path.trim()); 

मामले में आप बिना किसी स्पेस के पथ करना चाहते हैं, तो आप इसे परिवर्तित कर सकते हैं यूआरआई के लिए और फिर वापस रास्ते पर

try { 
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20")); 
    File file = new File(u.getPath()); 
} catch (URISyntaxException ex) { 
    Exceptions.printStackTrace(ex); 
} 
संबंधित मुद्दे