我是Android的新手我正在尝试从Android中读取和写入xml文件中的一些信息。我认为如果我使用DOM解析器来做这些事情是可能的......我正在读取应用程序的初始化文件以获取数据并尝试在应用程序终止之前保存以存储配置更改。我想出了如何从raw / xml读取文件,但是将修改后的xml保存到这里似乎真的很痛苦(甚至是不可能)... 也许我采取了错误的方法,但我相信它应该可以以某种方式修改Android中的一些内部xml文件。怎么去呢?
答案 0 :(得分:0)
您无法修改或更新raw/xml
文件目录。 Android /res
目录为只读。因此,您只能从中读取文件而不允许回写。 (由于Android .apk文件具有只读权限)。
答案 1 :(得分:0)
cant modify
中的xml folder
xml需要copy
该文件,同时在设备上安装应用到sdcard/internal storage
并修改它。在这种情况下你可以使用Dom Parser从设备的sdcard /内部存储器读取和写入xml文件。
答案 2 :(得分:0)
@ user370305是对的!!
简单的逻辑是你无法在运行时内部在存储器中创建文件(原始,资产,布局等)。因此,您可以通过提供权限“write_external_storage”在外部创建不同的文件。然后你就可以阅读或写作。
这是一个例子
public void readXML() throws IOException{
//get the xml file from the raw folder
InputStream is = getResources().openRawResource(
R.raw. config );
Resources r = getResources();
AssetManager assetManager = r .getAssets();
//then write the dummy file
File f = new File(Environment.getExternalStorageDirectory(), "dummy.xml" );
OutputStream os = new FileOutputStream(f , true);
final int buffer_size = 1024 * 1024;
try
{
byte [] bytes = new byte [buffer_size ];
for (;;)
{
int count = is.read( bytes, 0, buffer_size );
if (count == -1)
break ;
os.write( bytes , 0, count );
}
is.close();
os.close();
}
catch (Exception ex )
{
ex.printStackTrace();
}
//then parse it
parseConfigXML( f);
}
public String parseConfigXML(File configXML ) {
XmlPullParser xpp = null ;
String httpUrl= "";
FileInputStream fis ;
XmlPullParserFactory factory = null ;
try {
fis = new FileInputStream( configXML);
factory = XmlPullParserFactory.newInstance();
factory .setNamespaceAware( true);
xpp = factory .newPullParser();
xpp .setInput( new InputStreamReader( fis));
int eventType = xpp.getEventType();
while (eventType != XmlPullParser. END_DOCUMENT) {
if (eventType == XmlPullParser. START_DOCUMENT) {
} else if (eventType == XmlPullParser. START_TAG) {
} else if (eventType == XmlPullParser. END_TAG) {
} else if (eventType == XmlPullParser. TEXT) {
httpUrl += xpp .getText().replace( "\n", "" );
}
eventType = xpp .next();
}
} catch (FileNotFoundException e1 ) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (XmlPullParserException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return httpUrl .trim().replace( "\n", "" );
}