11

Guys i have a problem that my code gives an Exception as Permission Denied when we write a xml in android. can any one tell that How it will be removed.

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");
        }
    }
}
user634618
  • 3,573
  • 1
  • 24
  • 17
Sanat Pandey
  • 2,599
  • 5
  • 28
  • 40

6 Answers6

5
File newxmlfile = new File("C:/new.xml");

You're trying to create your file on drive C. Android is a linux-based system, so there are no drives there. The storage devices can be mounted to root ("/") or any other folder.

For your application /data/<pakcage-name> folder is available. Try to write there. Also, you can try to write to external storage, but your progrma will need a permission to do that:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

This should be mentioned within your manifest file.

Read more here.

Vladimir Ivanov
  • 42,730
  • 18
  • 77
  • 103
  • thanks Vladimir, and you are true that it gives a Permission denied Exception. so, can u tell how it can be remove. – Sanat Pandey Mar 03 '11 at 13:23
0

You can use this:

File xmlDir = new File(Environment.getExternalStorageDirectory().getPath() + "/data/new.xml");
m00am
  • 5,910
  • 11
  • 53
  • 69
0

It seems like your trying to create a file at the location of c:/ which is not a valid path identifier on a android system. Android comes from a linux environment.

http://developer.android.com/guide/topics/data/data-storage.html follow this link to learn more about data storage on android

If you want to create a file on your local pc you first need to create it on your Android device and then pull it from the device (either the emulator or your real phone)

Johnnycube
  • 1,060
  • 1
  • 10
  • 25
0

You're not allowed to write to that location.

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

You could save it to the internal storage, or cache.

Joakim Berglund
  • 2,859
  • 1
  • 22
  • 30
0

Due to the Android security model you can't write to /data/new.xml. That's trying to right to the root file system which is why you are getting permission denied. Try it without the leading slash.

FileOutputStream fos = openFileOutput("new.xml", MODE_PRIVATE);
fos.write(...);

That should put it relative to your app.

Robby Pond
  • 73,164
  • 16
  • 126
  • 119
0

Have you added the necessary permission for this?

http://developer.android.com/reference/android/Manifest.permission.html

Permission to write to the SD card

Community
  • 1
  • 1
Codemonkey
  • 3,412
  • 3
  • 20
  • 24