2015-02-08 71 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