我正在尝试学习如何使用此线程中详述的Simple XML Framework:Best practices for parsing XML。
我使用以下代码:
public class SimpleXMLParserActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");
try {
Log.d("Start", "Starting Serializer");
serializer.write(example, result);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Self", "Error");
e.printStackTrace();
}
}
}
我在理解这条线时遇到了问题
File result = new File("example.xml");
1)这行是否在我的app中创建了一个名为example.xml的新文件?如果是这样,该文件位于何处。
2)或者这行是否会查找名为example.xml的现有文件,然后添加到该文件中?如果是这样,应该将example.xml文件放在我的应用程序包中,以便找到它。我确实注意到我收到错误消息:
java.io.FileNotFoundException: /example.xml (Read-only file system)
谢谢。
答案 0 :(得分:5)
File result = new File("example.xml")
这一行只会将文件名“example.xml”存储在新的File
对象中。没有检查该文件是否确实存在,也没有尝试创建它。
未指定绝对路径的文件(以/
开头,如new File("/sdcard/example.xml")
)被认为位于当前工作目录中,我认为对于Android应用是/
( - > /example.xml (Read-only file system)
)
我猜serializer.write(example, result);
尝试为您创建实际文件,但由于您无法写入'/'而失败。
您必须指定该文件的路径。您可以在多个地方存储文件,例如
/data/data/your.package/files/
)中为您提供一个位置,只有您可以阅读/写入 - 无需额外许可。/sdcard/
- 但这对设备来说非常不同)。要在此处撰写,您需要WRITE_EXTERNAL_STORAGE权限。/sdcard/Android/data/your.package/
)修复您可以执行的代码
File result = new File(Environment.getExternalStorageDirectory(), "example.xml");
编辑:使用提供的机制获取现有目录(首选但您只能使用您应该使用的文件夹):
// via File - /data/data/your.package/app_assets/example.xml
File outputFile = new File(getDir("assets", Context.MODE_PRIVATE), "example.xml");
serializer.write(outputFile, result);
// via FileOutputStream - /data/data/your.package/files/example.xml
FileOutputStream outputStream = openFileOutput("example.xml", Context.MODE_PRIVATE);
serializer.write(outputStream, result);
或者您可能需要自己创建目录(以hackish方式获取您的应用目录,但它应该有效):
File outputFile = new File(new File(getFilesDir().getParentFile(), "assets"), "example.xml");
outputFile.mkdirs();
serializer.write(outputFile, result);
尽量避免指定"/data/data/com.simpletest.test/assets/example.xml"
之类的完整路径,因为它们可能在其他设备/ Android版本上有所不同。即使/
也不保证/
。如果必须,使用File.separatorChar
会更安全。
答案 1 :(得分:0)
我在Android页面上看到的内容,我看到它创建了一个具有该名称的文件:
我认为它将它写入/ data / data / packagname 目录
编辑:'packagename'未显示在上面的tekst中。我把它放在括号之间。 :■
答案 2 :(得分:0)
2个干净利落的解决方案:
我建议使用方法1,这对用户来说更好,因为卸载应用时会删除这些文件。如果文件很大,那么使用外部存储可能会更好。
答案 3 :(得分:0)
尝试保存到/sdcard/example.xml
。