2015-02-08 84 views
-1

我已經創建了一個文件,我想將其打開。在用一些常見的開始文本創建文件後,我調用方法writeValuestoFile(String fname),其中fname是文件名。在這個方法中,我想打開我已經通過另一種方法創建的文件並且只是更新它。但是,我是InvalidArgumentException。我懷疑我的道路是否正確。投入將受到高度讚賞。這是我的方法調用。如何打開已在Android Phone SD卡中創建的文件

public void writeValuestoFile(String fname) { 
String rec_x_string = Float.valueOf((x_updated)).toString(); 
     String rec_y_string = Float.valueOf((y_updated)).toString(); 
     String rec_z_string = Float.valueOf((z_updated)).toString(); 
     try { 
      FileOutputStream fout = openFileOutput("sdcard/Accelorometer Readings/"+file_name, Context.MODE_APPEND); 
      OutputStreamWriter write = new OutputStreamWriter(fout); 
      String newline = System.getProperty("line.seperator"); 
      try { 
       write.append(newline); 
       write.append(newline); 
       write.write(rec_x_string + "  " + rec_y_string + "  " + rec_z_string); 
       write.flush(); 
       write.close(); 
       fout.close(); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 



     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return; 

    } 

這是我異常的logcat:

02-08 05:57:49.869: E/AndroidRuntime(24818): FATAL EXCEPTION: main 
02-08 05:57:49.869: E/AndroidRuntime(24818): java.lang.IllegalArgumentException: File sdcard/Accelorometer Readings/null contains a path separator 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.app.ContextImpl.makeFilename(ContextImpl.java:1674) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.app.ContextImpl.openFileOutput(ContextImpl.java:420) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at com.example.hw02_devarajan_q1.MainActivity.writeValuestoFile(MainActivity.java:241) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at com.example.hw02_devarajan_q1.MainActivity$2.run(MainActivity.java:91) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.os.Handler.handleCallback(Handler.java:587) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.os.Looper.loop(Looper.java:130) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at android.app.ActivityThread.main(ActivityThread.java:3687) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at java.lang.reflect.Method.invokeNative(Native Method) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at java.lang.reflect.Method.invoke(Method.java:507) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
02-08 05:57:49.869: E/AndroidRuntime(24818): at dalvik.system.NativeStart.main(Native Method) 
+0

LogCat說什麼? – MarsAtomic 2015-02-08 00:20:32

+0

另外,openFileOutput是調用更新文件的函數嗎? – 2015-02-08 00:26:39

+0

[java.lang.IllegalArgumentException:包含路徑分隔符]的可能重複(http://stackoverflow.com/questions/5963535/java-lang-illegalargumentexception-contains-a-path-separator) – immibis 2015-02-08 00:39:46

回答

0

不要使用硬編碼sdcard/ - 這是長時間不用提它可能根本就沒有在所有設備上工作WRONG方法。您應該使用Environment類的方法(如getExternalStorageDirectory())來獲取此處記錄的正確目錄。 You should read this chapter of documentation,看看這應該如何正確完成。不要忘記適當的權限。

另外:fname參數在您的writeValuestoFile()函數中根本不使用。

+0

感謝您指出。我知道如何使用它來創建一個新文件。但是,您如何使用它來打開現有的文件。我將文件名作爲輸入傳遞給方法。 – 2015-02-08 00:44:04

+0

我試過這個但仍然是同樣的問題openFileOutput(Environment.getExternalStorageDirectory()+「/ Accelorometer Readings /」+ fname – 2015-02-08 00:47:53

+0

你根本沒有使用函數參數 – 2015-02-08 09:00:21