设备上找不到文件异常

时间:2014-05-12 07:58:54

标签: android

我是android新手。通过以下代码,我能够在模拟器中成功创建文件,但是当我在我的设备上运行时,我得到一个未找到文件的异常。

String l = pwd;
FileOutputStream fos, fos2, fos3;
                    // Log.d("spt", pwd);

                    File registrationinfo = new File(
                            "data/data/com.example.spotter/files/pwd.txt");
                    File registrationinfo2 = new File(
                            "data/data/com.example.spotter/files/uname.txt");
                    File registrationinfo3 = new File(
                            "data/data/com.example.spotter/files/sph.txt");
                    fos = new FileOutputStream(registrationinfo);
                    fos2 = new FileOutputStream(registrationinfo2);
                    fos3 = new FileOutputStream(registrationinfo3);

                    byte buf[] = l.getBytes();
                    for (int i = 0; i < buf.length; i++) {
                        fos.write(buf[i]);
                    }
                    fos.close();
                    byte buf2[] = uname.getBytes();
                    for (int i = 0; i < buf2.length; i++) {
                        fos2.write(buf2[i]);
                    }

                    fos2.close();
                    byte buf3[] = sph.getBytes();
                    for (int i = 0; i < buf3.length; i++) {
                        fos3.write(buf3[i]);
                    }

当我在手机上运行此代码时,这是我的logcat:

05-12 13:06:11.425: W/System.err(19066): java.io.FileNotFoundException: /data/data/com.example.spotter/files/pwd.txt (No such file or directory)
05-12 13:06:11.425: W/System.err(19066):    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
05-12 13:06:11.425: W/System.err(19066):    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
05-12 13:06:11.425: W/System.err(19066):    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
05-12 13:06:11.425: W/System.err(19066):    at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
05-12 13:06:11.425: W/System.err(19066):    at com.example.spotter.Register.onClick(Register.java:114)
05-12 13:06:11.435: W/System.err(19066):    at android.view.View.performClick(View.java:2533)
05-12 13:06:11.435: W/System.err(19066):    at android.view.View$PerformClick.run(View.java:9320)
05-12 13:06:11.435: W/System.err(19066):    at android.os.Handler.handleCallback(Handler.java:587)
05-12 13:06:11.435: W/System.err(19066):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-12 13:06:11.435: W/System.err(19066):    at android.os.Looper.loop(Looper.java:150)
05-12 13:06:11.435: W/System.err(19066):    at android.app.ActivityThread.main(ActivityThread.java:4389)
05-12 13:06:11.435: W/System.err(19066):    at java.lang.reflect.Method.invokeNative(Native Method)
05-12 13:06:11.485: W/System.err(19066):    at java.lang.reflect.Method.invoke(Method.java:507)
05-12 13:06:11.485: W/System.err(19066):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
05-12 13:06:11.485: W/System.err(19066):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
05-12 13:06:11.485: W/System.err(19066):    at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:1)

检查指定的文件路径是否存在。如果没有,那么创建它

File registrationInfoFolder = new File(
                        "data/data/com.example.spotter/files");

if(!registrationInfoFolder.exists()){
      registrationInfoFolder.mkdirs(); // It will create directory's if not exists
 } 

然后使用FileOutputStream添加您的文件。发生这种情况是因为指定路径上没有文件。

答案 1 :(得分:0)

您不应该使用new File("data/data/com.example.spotter/files/pwd.txt");的直接电话 而不是那样,请致电getFilesDirFile registrationinfo = context.getFilesDir("pwd.txt")

答案 2 :(得分:0)

我不确定你是否解决了问题。但您可以尝试在AndroidMenifest.xml中添加权限

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

答案 3 :(得分:0)

我认为你需要使用

FileOutputStream fos = openFileOutput("pwd.txt", Context.MODE_APPEND | Context.MODE_WORLD_READABLE);

而不是

File registrationinfo = new File("data/data/com.example.spotter/files/pwd.txt");

读取文件数据。

从上面的代码中,您可以使用应用程序的文件夹。

您也可以从THIS链接获得帮助。