2014-10-18 3 views
0

У меня проблема с сохранением/созданием файла на моей SD-карте для сохранения текста, я пытаюсь проверить, создан ли файл и если он его не создал, а затем записать на него определенные данные нажмите кнопку. Вот мой код и ошибочный вывод:Не удается сохранить файлы на SDcard android app

Это ошибка выхода:

java.lang.RuntimeException: Unable to start activity ComponentInfo{ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds/ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity}: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
      at android.app.ActivityThread.access$800(ActivityThread.java:138) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5034) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1270) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1086) 
      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator 
      at android.app.ContextImpl.makeFilename(ContextImpl.java:2165) 
      at android.app.ContextImpl.getFileStreamPath(ContextImpl.java:964) 
      at android.content.ContextWrapper.getFileStreamPath(ContextWrapper.java:195) 
      at ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity.onCreate(MainActivity.java:207) 
      at android.app.Activity.performCreate(Activity.java:5231) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
            at android.app.ActivityThread.access$800(ActivityThread.java:138) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5034) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 

и вот код для сохранения файла:

String SDRoot = Environment.getExternalStorageDirectory().getPath(); 
      final File output = getFileStreamPath(SDRoot + "/output.txt"); 
     if(!output.exists()){ 
      try { 
       output.createNewFile(); 
       Context context = getApplicationContext(); 
       CharSequence text = "Output File Created!"; 
       int duration = Toast.LENGTH_LONG; 

       Toast fileCreated = Toast.makeText(context, text, duration); 
       fileCreated.show(); 
      } catch (IOException e) { 
       Context context = getApplicationContext(); 
       CharSequence text = "Output File Not Created!"; 
       int duration = Toast.LENGTH_LONG; 

       Toast fileNotCreated = Toast.makeText(context, text, duration); 
       fileNotCreated.show(); 
       e.printStackTrace(); 
      } 
     } 


      Button addbutton = (Button)findViewById(R.id.addMeds); 
     addbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String outputLine = medOut.toString() + doseOut.getText() + dayout.getText() + timeOut.getText(); 

       try { 
        FileOutputStream fOut = new FileOutputStream(output); 
        OutputStreamWriter myOutputStreamWriter = new OutputStreamWriter(fOut); 
        myOutputStreamWriter.append(outputLine); 
        myOutputStreamWriter.flush(); 
        myOutputStreamWriter.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
        Toast.makeText(getBaseContext(), e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        Toast.makeText(getBaseContext(), e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 
} 
+0

Я не могу найти ответ в этом вопросе @Omersonmez –

+1

вам нужно использовать имя файла с вне пути. Кажется, что ваше имя файла содержит путь sdcard. –

+0

то как определить, где файл создан? @omersonmez –

ответ

0

http://developer.android.com/reference/android/content/Context.html#getFileStreamPath(java.lang.String)

Параметры : name Имя файла, для которого вы хотите получить свой путь.

Если вы указали путь (содержащий «/»), он столкнется, как вы уже заметили.

Кроме того, эта функция применяется только для личных файлов приложения, созданных, например, с помощью openFileOuput.

http://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String, целое)

Просто сделайте так:

String SDRoot = Environment.getExternalStorageDirectory().getPath(); 
final File output = new File(SDRoot + "/output.txt"); 
Смежные вопросы