java.lang.IllegalArgumentException: एक पथ विभाजक होता है


79

मेरे पास मेरे कोड में एक फ़ाइल नाम है:

String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line

मुझे 2 लाइन पर एक त्रुटि मिलती है:

05-11 16: 49: 06.355: ERROR / AndroidRuntime (4570): इसके कारण: java.lang.IllegalArgumentException: फ़ाइल //sdcard//imageq.png में एक पथ विभाजक होता है

मैंने इस प्रारूप को भी आजमाया:

String NAME_OF_FILE="/sdcard/imageq.png";

जवाबों:


58

यह विधि एप्लिकेशन के निजी डेटा क्षेत्र में एक फ़ाइल खोलती है। आप इस पद्धति का उपयोग करके इस क्षेत्र में या पूरी तरह से अन्य क्षेत्रों में उपनिर्देशिका में कोई भी फाइल नहीं खोल सकते। तो FileInputStreamएक निर्देशिका के साथ पथ को पारित करने के लिए सीधे के निर्माता का उपयोग करें ।


46
इसके लिए कुछ उदाहरण दें
— आनंद सवजानी

11
आपका उत्तर भ्रमित करने वाला है; ओपी एक FileInputStream
— FracturedRetina


2
कृपया उत्तर पर खुलासा करें।
— इगोरगानापोलस्की 13

1
यह गलत उत्तर है - कृपया नीचे दिए गए उत्तर को देखें
— bharal

81

समाधान है:

FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE));  // 2nd line

OpenFileInput विधि पथ विभाजकों को स्वीकार नहीं करती है।

भूलना मत

fis.close();

अतं मै।


यह देखते हुए कि कोई FileInputStreamइस तरह का उपयोग कर सकता है , क्यों उपयोग करना है openFileInput?
— अल लेलोपैथ

1
यह सही ढंग से चिह्नित उत्तर होना चाहिए क्योंकि यह एक स्पष्ट उदाहरण प्रदान करता है।
— मारीनेके

सरल समाधान सबसे अच्छे हैं। धन्यवाद।
— डेंजर

30

openFileInput()पथ स्वीकार नहीं करता है, केवल एक फ़ाइल नाम यदि आप एक पथ, उपयोग File file = new File(path)और इसी का उपयोग करना चाहते हैंFileInputStream


40
यदि आप इसे प्राप्त करने के लिए कुछ नमूना कोड प्रदान करते हैं तो बहुत अच्छा होगा!
— मुहम्मद बाबर

2
@MuhammadBabar बेशक आपको कोड की आवश्यकता है, आप हमेशा किसी को आपको प्रदान किए बिना कोड नहीं कर सकते। शायद डॉक्स की जाँच करें?
— नियॉन वॉरज

3

openFileInput("/Dir/data.txt")उपनिर्देशिका के साथ विधि का उपयोग करके आंतरिक संग्रहण से फ़ाइल तक पहुंचने का प्रयास करते समय मुझे उपरोक्त त्रुटि संदेश मिला Dir।

उपरोक्त विधि का उपयोग करके आप उप-निर्देशिकाओं तक नहीं पहुँच सकते।

कुछ इस तरह का प्रयास करें:

FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));

2

आप निर्देशिका विभाजकों के साथ सीधे पथ का उपयोग नहीं कर सकते हैं, लेकिन आपको प्रत्येक निर्देशिका के लिए एक फ़ाइल ऑब्जेक्ट बनाना होगा।

नोट: यह कोड निर्देशिका बनाता है, आपकी आवश्यकता हो सकती है कि नहीं ...

File file= context.getFilesDir();
file.mkdir();

String[] array=filePath.split("/");
for(int t=0; t< array.length -1 ;t++)
{
    file=new File(file,array[t]);
    file.mkdir();
}

File f=new File(file,array[array.length-1]);

RandomAccessFileOutputStream rvalue = new RandomAccessFileOutputStream(f,append);

5
क्या ? File f = new File(fileDirPath); f.mkdirs();कृपया संपादित करें
— Mr_and_Mrs_D

1
String all = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(filePath));
            String strLine;
            while ((strLine = br.readLine()) != null){
                all = all + strLine;
            }
        } catch (IOException e) {
            Log.e("notes_err", e.getLocalizedMessage());
        }

0
File file = context.getFilesDir(); 
file.mkdir();
String[] array = filePath.split("/"); 
for(int t = 0; t < array.length - 1; t++) {
    file = new File(file, array[t]); 
    file.mkdir();
}
File f = new File(file,array[array.length- 1]); 
RandomAccessFileOutputStream rvalue = 
    new RandomAccessFileOutputStream(f, append);

पिछले एक के रूप में एक ही जवाब।
— अनीस LOUNIS

0

मैंने onCreate ईवेंट में एक निर्देशिका बनाकर इस प्रकार की त्रुटि को हल किया, फिर एक ऐसी विधि में एक नई फ़ाइल ऑब्जेक्ट बनाकर डायरेक्टरी को एक्सेस किया, जिसमें उस डायरेक्टरी में किसी फाइल को सेव करने या पुनः प्राप्त करने जैसे कुछ करने की आवश्यकता होती है, आशा है कि इससे मदद मिलेगी!

 public class MyClass {    

 private String state;
 public File myFilename;

 @Override
 protected void onCreate(Bundle savedInstanceState) {//create your directory the user will be able to find
    super.onCreate(savedInstanceState);
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        myFilename = new File(Environment.getExternalStorageDirectory().toString() + "/My Directory");
        if (!myFilename.exists()) {
            myFilename.mkdirs();
        }
    }
 }

 public void myMethod {

 File fileTo = new File(myFilename.toString() + "/myPic.png");  
 // use fileTo object to save your file in your new directory that was created in the onCreate method
 }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.