我想我对文件如何存储在实际机器(或模拟器)上有点困惑。
编程时,我可以手动将我的xml文件保存在assets文件夹中,但是如何编写一个必须连接到网络并下载文件的应用程序,将其保存在某处然后操作它?它将存储所述文件的位置?
我想创建一个新文件,但我在另一篇文章中读到,资产文件夹一旦打包就不可用;那么他们在哪里创建和存储?他们怎么可以转移。它只是,我是这个平台的新手,文件系统有点令人困惑。
答案 0 :(得分:0)
如果要使用已更新的XML,则应考虑将文件从资产复制到设备存储。您可以查看How to copy files from 'assets' folder to sdcard?以了解如何做到这一点。
另一种方法是使用数据库,您可以在其中存储XML中的已解析数据。这样,无论何时需要访问内容,都无需解析文件。
答案 1 :(得分:0)
您有两种选择:从您的活动中调用getFilesDir()以获取只能从您的应用程序读取/写入的内部数据文件夹的路径。
或者,您可以将xml文件写入/读取到外部存储器(SD卡)。使用Environment.getExternalStorageDirectory()方法获取外部存储的根路径,然后根据需要创建自己的文件夹。
请注意,如果您写入外部存储空间,手机中的每个应用都可以访问它。
答案 2 :(得分:0)
即使我遇到了这个问题。现在我有一个xml文件,它有应用程序属性。这是打包在assets文件夹中。一旦打包我们就无法编辑assets文件夹中的文件。 现在,在应用程序加载时,我只是将此文件复制到
返回的路径context.getFilesDir().getAbsolutePath();
应用程序从同一个地方编辑它。您可以在 DDMS 视图的 FileExplorer 面板中查看是否修改了该文件。该文件存储在名为与应用程序包名称相同的文件夹中,例如:com.abhi.maps
或者您也可以将其复制到SD卡。但是它有风险,因为SD卡可能一直可用。
您可以使用以下代码从资源文件夹中复制文件:
private static void copyFile(String filename, Context context) {
AssetManager assetManager = context.getAssets();
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
String newFileName = context.getFilesDir() + "/" + filename;
out = new FileOutputStream(newFileName);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
希望它有所帮助! :)