我正在尝试使用以下代码在我的Android应用中创建一个简单的文本文件:
FileOutputStream fileout=mContext.openFileOutput("mytextfile.txt", mContext.MODE_PRIVATE);
OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
outputWriter.write(String.valueOf(executionTime));
outputWriter.close();
Log.d("write","Done writing to 'mysdfile.txt'");
我将不同的文件路径记录为:
String absoluteFilePath=new File(".").getAbsolutePath();
String canonicalFilePath=new File(".").getCanonicalPath();
String filePath=new File(".").getPath();
Log.d("absolutepath",absoluteFilePath);
Log.d("canonicalpath",canonicalFilePath);
Log.d("path",filePath);
在调试器中我看到文件路径为:
当我点击绝对路径蓝色标记时,它将我带到Macintosh HDD文件夹。其余两条路径对我没有任何意义。
我还检查了当前目录,文件不在那里。我正在尝试将文件存储在内部存储中。
我正在棒棒糖设备上测试它。
注意:我在应用程序在模拟器上运行时看到在DDMS中创建的文件,但在设备上没有。
我在哪里可以找到FileOutputStream创建的文件?
答案 0 :(得分:1)
我在哪里可以找到FileOutputStream创建的文件?
它将在Android设备或模拟器上。
我将不同的文件路径记录为
这些都不是Android上的有效路径。
我的Android设备没有SD卡
没关系,因为openFileOutput()
与任何Android设备上的SD卡无关。 openFileOutput()
路由到internal storage。
我可以在哪里查看设备?
引用myself:
在模拟器上,DDMS可以浏览所有内部存储,因此您可以从应用程序或任何其他应用程序访问文件。
在有根设备上,有一些方法可以让DDMS获得相同的自由度。
在普通(非root)设备上,DDMS无法访问内部存储。 DDMS会话的设备上的软件作为硬件上的普通用户帐户运行,而它在模拟器上以超级用户权限运行。硬件上的普通用户无法访问您应用的文件,只不过与任何其他应用相关联的任何用户帐户。
在硬件上获取内部存储的方法是在命令行中使用adb的run-as选项。例如,要将数据库从主用户的内部存储器下载到开发计算机,您可以使用:
adb shell 'run-as your.application.package.name cp /data/data/your.application.package.name/databases/dbname.db /sdcard
请注意:
您需要将目标更改为设备外部存储器映射到的位置(此处显示为
/sdcard/
,这不适用于所有设备)您可能需要在旧设备上使用
cat
代替cp
但是,一旦运行该命令,数据库将被复制到外部存储器,您可以通过DDMS或通过任何传统方式访问该外部存储器以通过USB电缆在设备上打开和关闭文件(例如,Windows中的驱动器号) )。