2013-11-25 11 views
7

मैं चाहता हूं कि यह खंड एक बटन क्लिक होने पर एक सीएसवी फ़ाइल को लिखने के लिए चाहता है लेकिन मैं java.io.IOException प्राप्त कर रहा हूं: खुला असफल: ENOENT (ऐसी कोई फ़ाइल या निर्देशिका नहीं)। किसी भी तरह की सहायता का स्वागत किया जाएगा।एंड्रॉइड फ़ाइल नहीं बना रहा

public class AddFragment extends Fragment { 

    static EditText spent,saved,coupons; 
    Button writeExcelButton; 
    String data; 
    Spinner spinner; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.add_layout, container, false); 

     setSpinnerContent(view); 

     spent = (EditText) view.findViewById(R.id.spent1); 
     saved = (EditText) view.findViewById(R.id.saved1); 
     coupons = (EditText) view.findViewById(R.id.coupons1); 

     writeExcelButton = (Button) view.findViewById(R.id.button_addGroc); 
     writeExcelButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       updateSheet(); 
      } 
     }); 

     return view; 
    } 

    private void setSpinnerContent (View view) { 
     spinner = (Spinner) view.findViewById(R.id.groc_store); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
      R.array.store1, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
    } 

    public void updateSheet() { 
     try { 
      // This is the string that should be written to file 
      String mySpin =spinner.getSelectedItem().toString(); 
      data = mySpin + "," + spent.getText().toString() + "," + saved.getText().toString() + "," + coupons.getText().toString() + "/n"; 

      // This is the file that should be written to 
      String sdCard = Environment.getExternalStorageDirectory().toString(); 
      File dir = new File(sdCard + "/dir"); 
      if (!dir.exists()) { 
       dir.mkdir(); 
      } 

      File myFile = new File(dir.getAbsolutePath(), "savings.csv"); 

      // if file doesn't exists, then create it 
      if (!myFile.exists()) { 
       myFile.createNewFile(); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

यह मेरा LogCat कैसा दिखाई देता है

11-14 13:29:23.681: W/System.err(14386): java.io.IOException: open failed: ENOENT (No such file or directory) 
11-14 13:29:23.681: W/System.err(14386): at java.io.File.createNewFile(File.java:948) 
11-14 13:29:23.691: W/System.err(14386): at com.example.myfirstapp.AddFragment.updateSheet(AddFragment.java:101) 
11-14 13:29:23.691: W/System.err(14386): at com.example.myfirstapp.AddFragment$1.onClick(AddFragment.java:59) 
11-14 13:29:23.691: W/System.err(14386): at android.view.View.performClick(View.java:4240) 
11-14 13:29:23.691: W/System.err(14386): at android.view.View$PerformClick.run(View.java:17721) 
11-14 13:29:23.691: W/System.err(14386): at android.os.Handler.handleCallback(Handler.java:730) 
11-14 13:29:23.691: W/System.err(14386): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-14 13:29:23.691: W/System.err(14386): at android.os.Looper.loop(Looper.java:137) 
11-14 13:29:23.691: W/System.err(14386): at android.app.ActivityThread.main(ActivityThread.java:5103) 
11-14 13:29:23.691: W/System.err(14386): at java.lang.reflect.Method.invokeNative(Native Method) 
11-14 13:29:23.691: W/System.err(14386): at java.lang.reflect.Method.invoke(Method.java:525) 
11-14 13:29:23.701: W/System.err(14386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
11-14 13:29:23.711: W/System.err(14386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-14 13:29:23.711: W/System.err(14386): at dalvik.system.NativeStart.main(Native Method) 
11-14 13:29:23.711: W/System.err(14386): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
11-14 13:29:23.711: W/System.err(14386): at libcore.io.Posix.open(Native Method) 
11-14 13:29:23.711: W/System.err(14386): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
11-14 13:29:23.711: W/System.err(14386): at java.io.File.createNewFile(File.java:941) 
+0

क्या आपके पास आपके मेनिफेस्ट में '<अनुमति-अनुमति एंड्रॉइड: name = "android.permission.WRITE_EXTERNAL_STORAGE" /> 'है? – kiruwka

+1

हाँ, यह वहां है। – user3033922

उत्तर

21

dir.mkdir(); 

dir.mkdirs(); 

इसके अलावा करने के लिए सिर्फगुजर कोशिश बदलने का प्रयास करें हैके बजाय dir.getAbsolutePath()

संपादित

इसके अलावा, आप नहीं ऐसा फ़ाइल पथ concatanate करना चाहते हैं। आज़माएं:

File myFile = new File(Environment.getExternalStorageDirectory(), "dir/savings.csv"); 
if (!myFile.exists()) { 
    myFile.mkdirs(); 
    myFile.createNewFile(); 
} 
+0

मैंने आपके दोनों सुझावों को कोई किस्मत के साथ करने की कोशिश की। मैं इसे एक एमुलेटर पर चलाने की कोशिश कर रहा हूं, अगर इससे मदद मिलती है। – user3033922

+0

क्या आपने एम्यूलेटर को एसडीकार्ड समर्थन जोड़ा है? ग्रहण पर जाएं - विंडोज़ - एवीडी मैनेजर - एवीडी का चयन करें और संपादित करें - हार्डवेयर - नया - एसडीकार्ड समर्थन – Brianjs

+0

ठीक है इसलिए मैंने AVD को पहले से ही एवीडी शुरू करने के बाद एसडीकार्ड जोड़ा था और मैंने इसे पुनरारंभ करने के लिए नहीं सोचा था ... जब मैं बटन दबाता हूं तो लॉगबैट में अभी कुछ भी दिखाई नहीं देता है लेकिन मुझे फ़ाइल एक्सप्लोरर में फ़ाइल भी नहीं मिल रही है। Mnt/sdcard के बाद कोई अन्य निर्देशिका प्रतीत नहीं होती है। – user3033922

9

मैनिफेस्ट में यह अनुमतियां जोड़ें।

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

वास्तव में यह एक बहुत अच्छा पकड़ !! यदि उपयोगकर्ता इस अनुमति को नहीं जोड़ रहा है, तो एंड्रॉइड सिस्टम उपयोगकर्ता को लिखने की अनुमति नहीं देगा और वही ईएनओएनटी त्रुटि होगी। –

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