如何在安卓系统中创建XML文件

11

大家好,我有一个问题,当我们在Android中写入XML时,我的代码会出现“权限被拒绝”的异常。请问有人知道如何解决这个问题吗?

package com.ex.createXml;

import android.app.Activity;
import android.os.Bundle;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.xmlpull.v1.XmlSerializer;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.widget.TextView;


public class createXml extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        File newxmlfile = new File("/data/new.xml");
        try{
            newxmlfile.createNewFile();
        }catch(IOException e)
        {
            Log.e("IOException", "Exception in create new File(");
        }
        FileOutputStream fileos = null;
        try{
            fileos = new FileOutputStream(newxmlfile);

        }catch(FileNotFoundException e)
        {
            Log.e("FileNotFoundException",e.toString());
        }
        XmlSerializer serializer = Xml.newSerializer();
        try{
        serializer.setOutput(fileos, "UTF-8");
        serializer.startDocument(null, Boolean.valueOf(true));
        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
        serializer.startTag(null, "root");
        serializer.startTag(null, "Child1");
        serializer.endTag(null, "Child1");
        serializer.startTag(null, "Child2");
        serializer.attribute(null, "attribute", "value");
        serializer.endTag(null, "Child2");
        serializer.startTag(null, "Child3");
        serializer.text("Some text inside child 3");
        serializer.endTag(null,"Child3");
        serializer.endTag(null,"root");
        serializer.endDocument();
        serializer.flush();
        fileos.close();
        //TextView tv = (TextView)findViewById(R.);

        }catch(Exception e)
        {
            Log.e("Exception","Exception occured in wroting");
        }
    }
}

5
请不要再次询问相同的问题。 - user1228
6个回答

5
File newxmlfile = new File("C:/new.xml");
你试图在C盘上创建文件,但Android系统是基于Linux的,所以那里没有驱动器。存储设备可以挂载到根目录("/")或任何其他文件夹中。
对于你的应用程序,/data/<package-name>文件夹是可用的。尝试在那里写入。此外,你可以尝试写入外部存储,但你的程序需要获得权限才能这样做:
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这应该在您的清单文件中提到。

在此处阅读更多信息


谢谢Vladimir,你说得对,它会产生一个权限被拒绝的异常。那么,请问你能告诉我如何解决这个问题吗? - Sanat Pandey

0
你可以使用这个:
File xmlDir = new File(Environment.getExternalStorageDirectory().getPath() + "/data/new.xml");

0

看起来你正在尝试在 c:/ 这个位置创建一个文件,但这不是 Android 系统上的有效路径标识符。Android 来自 Linux 环境。

http://developer.android.com/guide/topics/data/data-storage.html 点击此链接了解有关 Android 上数据存储的更多信息

如果你想在本地电脑上创建一个文件,你需要先在 Android 设备上创建它,然后从设备中提取它(无论是模拟器还是真实手机)。


0

您无权写入该位置。

File newxmlfile = new File("/data/new.xml");

你可以将它保存到内部存储或缓存中。


0
由于 Android 安全模型的限制,您无法将数据写入 /data/new.xml。这是因为您试图将其写入根文件系统,所以会出现权限被拒绝的情况。请尝试去掉前面的斜杠再进行操作。
FileOutputStream fos = openFileOutput("new.xml", MODE_PRIVATE);
fos.write(...);

这将与您的应用程序相关。


但是它存储文件的位置在哪里? - Sanat Pandey
@SanatPandey 嘿,这个文件存储在哪里?你找到答案了吗?我不知道文件是在哪里创建的? - Atihska

0

我已经设置了清单权限,但错误仍然存在。 - Sanat Pandey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接