我是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)
答案 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");
的直接电话
而不是那样,请致电getFilesDir:File 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链接获得帮助。