我有一个名为weatherdata.xml的xml(它位于我的eclipse的> assets<文件夹中),它看起来像
<?xml version="1.0" encoding="utf-8"?>
<Weather>
<weatherdata>
<id>1</id>
<city>Berlin</city>
<tempc>0°C</tempc>
<tempf>32°F</tempf>
<condition>Snowing</condition>
<windspeed>5 kmph</windspeed>
<icon>snowing</icon>
</weatherdata>
<weatherdata>
<id>5</id>
<city>Sydney</city>
<tempc>32°C</tempc>
<tempf>89.6°F</tempf>
<condition>Sunny</condition>
<windspeed>10 kmph</windspeed>
<icon>sunny</icon>
</weatherdata>
所以我试图在运行时添加一个城市..我尝试单独使用java并且与this
工作正常我认为它可以与android一起运行,但是因为android功能与桌面应用程序完全不同所以不能再进一步了
我发现this很有趣,(虽然没有附加)
所以我的问题是
这个SD卡是什么,我需要写信给它吗
所以如果我写sdcard我可以期望在模拟器上和实际设备上输出相同的输出
/sdcard/weatherdata.xml
除此之外,是否有任何权利(manifest.xml
)困扰我写入xml文件
答案 0 :(得分:1)
资产是作为APK的一部分打包的只读文件。你无法改变它们。
您可以在2个地方为应用程序编写文件:
这些有点不同,有不同的优点/缺点,如下:
SD卡:
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限才能访问SD卡上的文件私人数据区:
我建议您将XML文件从资源复制到私有数据区(如果它还没有),然后始终使用私有数据区中的副本。如果要向其添加条目,则在私有数据区域中更新副本。
要在私人数据区域中打开文件,请使用openFileInput()
和openFileOutput()
。模拟器上的行为与设备上的行为相同。
答案 1 :(得分:0)
1)sdcard是您编写文件的地方(请注意,您在eclipse中的assets文件夹中的xml将不在那里,它将与您的应用程序捆绑在一起)
2)是的,仿真器和物理设备上的行为应该相同
3)您可以为文件选择所需的名称,但请注意,它与您在资产中放置的文件不同(参见1)。此外,您应该使用Environment.getExternalStorageDirectory();
而不是硬编码目录。
您需要将其添加到清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 2 :(得分:0)
这就是我的方式
try {
File file = getBaseContext().getFileStreamPath("weather.xml");
if (file.exists())
{
Log.d("weather.xml", "File Found !!!");
FileOutputStream fOut = getApplicationContext().openFileOutput(
"weather.xml", MODE_APPEND);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
String fileContent = "<Weather><weatherdata><city>Versace</city></weatherdata></Weather>";
osw.write(fileContent);
osw.flush();
osw.close();
Log.d("write mode: ", "MODE_APPEND");
}
else
{
FileOutputStream fOut = getApplicationContext().openFileOutput(
"weather.xml", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
String fileContent = "<?xml version="1.0" encoding="utf-8"?><Weather><weatherdata><city>Berlin</city></weatherdata></Weather>";
osw.write(fileContent);
osw.flush();
osw.close();
Log.d("write mode: ", "MODE_PRIVATE");
}
Log.d("status", "Finished writing to XML");
} catch (FileNotFoundException e) { Log.e("Error", "XML writing exception");
} catch (IOException e) { e.printStackTrace(); }
此处感兴趣的是写入模式,MODE_APPEND-用于附加已存在的xml文件,MODE_PRIVATE用于创建新文件,并写入。最后是getBaseContext()。getFileStreamPath(),用于检查目标文件是否存在..