Coozekoek
Coozekoek

Reputation: 41

java.io.FileNotFoundException on Android, open failed: ENOENT (No such file or directory)

I'm trying to save and write an XML file with some data for my app, but when it tries to open the file it gives an java.io.FileNotFoundException.

the code i'm using to save the XML file is:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount",   "2");
DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(new File(getActivity().getFilesDir(),  "rooster.xml"));
System.out.println("test");

The code I'm using to read the file is:

        File XmlFile = new File(getActivity().getFilesDir(), "file.xml");
        if (!XmlFile.exists()){
            System.out.println("No XML file!");
        }
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(XmlFile);

The logcat it gives is:

    OpenGL ES Shader Compiler Version: E031.24.00.15
    Build Date: 07/31/14 Thu
    Local Branch:
    Remote Branch: quic/LNX.LA.3.5.2.2_rb1
    Local Patches: NONE
    Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.2.2_RB1.04.04.04.087.028 +  NOTHING
04-04 18:30:41.206  13423-13423/com.carmel.roosterapp D/OpenGLRenderer﹕ Enabling debug mode 0
04-04 18:30:41.256  13423-13423/com.carmel.roosterapp I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@41b417c0 time:8749586
04-04 18:31:01.896  13423-13423/com.carmel.roosterapp I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@41b417c0 time:8770221
04-04 18:31:07.666  13423-13423/com.carmel.roosterapp I/Timeline﹕ Timeline: Activity_launch_request id:com.carmel.roosterapp time:8775992
04-04 18:31:07.956  13423-13423/com.carmel.roosterapp I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@41c18a58 time:8776280
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp W/dalvikvm﹕ VFY: unable to find class referenced in signature (Ljavax/naming/Reference;)
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp I/dalvikvm﹕ Could not find method javax.naming.Reference.get, referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.initializeFrom
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp W/dalvikvm﹕ VFY: unable to resolve virtual method 21843: Ljavax/naming/Reference;.get (Ljava/lang/String;)Ljavax/naming/RefAddr;
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0004
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp W/dalvikvm﹕ VFY: unable to find class referenced in signature (Ljavax/naming/Reference;)
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp E/dalvikvm﹕ Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2099 (Ljavax/naming/StringRefAddr;) in Lcom/mysql/jdbc/ConnectionPropertiesImpl$ConnectionProperty;
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0006
04-04 18:31:08.376  13423-13482/com.carmel.roosterapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x5555 at 0x14 in Lcom/mysql/jdbc/ConnectionPropertiesImpl$ConnectionProperty;.storeTo
04-04 18:31:08.546  13423-13482/com.carmel.roosterapp I/dalvikvm﹕ Could not find method java.lang.management.ManagementFactory.getThreadMXBean, referenced from method com.mysql.jdbc.MysqlIO.appendDeadlockStatusInformation
04-04 18:31:08.546  13423-13482/com.carmel.roosterapp W/dalvikvm﹕ VFY: unable to resolve static method 21024: Ljava/lang/management/ManagementFactory;.getThreadMXBean ()Ljava/lang/management/ThreadMXBean;
04-04 18:31:08.546  13423-13482/com.carmel.roosterapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0079
04-04 18:31:08.966  13423-13482/com.carmel.roosterapp I/System.out﹕ Connectie met Database!
04-04 18:31:09.126  13423-13482/com.carmel.roosterapp I/System.out﹕ test
04-04 18:31:11.146  13423-13423/com.carmel.roosterapp I/System.out﹕ No XML file!
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ java.io.FileNotFoundException: /data/data/com.carmel.roosterapp/files/rooster.xml: open failed: ENOENT (No such file or directory)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:78)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at libcore.net.url.FileURLConnection.connect(FileURLConnection.java:82)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:117)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:183)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at com.carmel.roosterapp.RoosterPagina.getRooster(RoosterPagina.java:135)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at com.carmel.roosterapp.RoosterPagina$DoInBackground.onPostExecute(RoosterPagina.java:370)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at com.carmel.roosterapp.RoosterPagina$DoInBackground.onPostExecute(RoosterPagina.java:155)
04-04 18:31:11.156  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5146)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
04-04 18:31:11.166  13423-13423/com.carmel.roosterapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
04-04 18:31:11.176  13423-13423/com.carmel.roosterapp W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
04-04 18:31:11.176  13423-13423/com.carmel.roosterapp W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
04-04 18:31:11.186  13423-13423/com.carmel.roosterapp W/System.err﹕ at libcore.io.Posix.open(Native Method)
04-04 18:31:11.186  13423-13423/com.carmel.roosterapp W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
04-04 18:31:11.186  13423-13423/com.carmel.roosterapp W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:393)
04-04 18:31:11.186  13423-13423/com.carmel.roosterapp W/System.err﹕ ... 18 more
04-04 18:31:11.186  13423-13423/com.carmel.roosterapp I/Choreographer﹕ Skipped 129 frames!  The application may be doing too much work on its main thread.

Does someone know how to solve this problem? Thanks in advance

EDIT: the whole write code is: (sorry, some names and comments are in Dutch)

public class DoInBackground extends AsyncTask<Void, Void, Void> implements DialogInterface.OnCancelListener {

    private ProgressDialog dialog;

    private static final String TAG = "LOL123";

    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }

    public boolean hasInternetAccess(Context context) {
        if (isNetworkAvailable(context)) {
            try {
                HttpURLConnection urlc = (HttpURLConnection)
                        (new URL("http://clients3.google.com/generate_204")
                                .openConnection());
                urlc.setRequestProperty("User-Agent", "Android");
                urlc.setRequestProperty("Connection", "close");
                urlc.setConnectTimeout(1500);
                urlc.connect();
                return (urlc.getResponseCode() == 204 &&
                        urlc.getContentLength() == 0);
            } catch (IOException e) {
                Log.e(TAG, "Error checking internet connection", e);
            }
        } else {
            Log.d(TAG, "No network available!");
        }
        return false;
    }

    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("Laden...");
        dialog.setTitle("Rooster Updaten");
        dialog.setIndeterminate(false);
        dialog.setCancelable(true);
        dialog.show();

    }

    @Override
    protected Void doInBackground(Void... unused) {
        if (hasInternetAccess(getActivity())) {
            //haal llnr/docentcode op
            SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, 0);
            String code = settings.getString("Code", null);

            String[] dagen;
            dagen = new String[5];
            dagen[0] = "maandag";
            dagen[1] = "dinsdag";
            dagen[2] = "woensdag";
            dagen[3] = "donderdag";
            dagen[4] = "vrijdag";
            int aantDagen = dagen.length;

            // bepaal de dag van de week
            //Calendar c = Calendar.getInstance();
            //int dayOfWeek = c.get(Calendar.DAY_OF_WEEK)-2;

            String url = "jdbc:mysql://carmelrooster.nl:3306/";
            String dbName = "systeemnieuw";
            String tblName = "leerlingrooster";
            String driver = "com.mysql.jdbc.Driver";
            String userName = "app";
            String password = "password";
            String Llnr = code;
            try {
                Class.forName(driver).newInstance();
                Connection conn = DriverManager.getConnection(url + dbName, userName, password);

                System.out.println("Connectie met Database!");

                //maak een nieuw DOM Document
                DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = docFactory.newDocumentBuilder();

                //root elements
                Document doc = documentBuilder.newDocument();
                Element rootElement = doc.createElement("rooster");
                doc.appendChild(rootElement);

                Statement stmt = conn.createStatement();
                for (int i = 0; i < aantDagen; i++ ) {

                    ResultSet res = stmt.executeQuery("SELECT u1,u2,u3,u4,u5,u6,u7,u8 FROM " + tblName +" WHERE dag = '" + dagen[i] + "' and llnr = '" + Llnr + "'");
                    while (res.next()) {
                        String eerste = res.getString("u1");
                        eerste = eerste.replace("<br />", " ");
                        eerste = eerste.replace("<c>", " ");
                        eerste = eerste.replace("</c>", " ");
                        String tweede = res.getString("u2");
                        tweede = tweede.replace("<br />", " ");
                        tweede = tweede.replace("<c>", " ");
                        tweede = tweede.replace("</c>", " ");
                        String derde = res.getString("u3");
                        derde = derde.replace("<br />", " ");
                        derde = derde.replace("<c>", " ");
                        derde = derde.replace("</c>", " ");
                        String vierde = res.getString("u4");
                        vierde = vierde.replace("<br />", " ");
                        vierde = vierde.replace("<c>", " ");
                        vierde = vierde.replace("</c>", " ");
                        String vijfde = res.getString("u5");
                        vijfde = vijfde.replace("<br />", " ");
                        vijfde = vijfde.replace("<c>", " ");
                        vijfde = vijfde.replace("</c>", " ");
                        String zesde = res.getString("u6");
                        zesde = zesde.replace("<br />", " ");
                        zesde = zesde.replace("<c>", " ");
                        zesde = zesde.replace("</c>", " ");
                        String zevende = res.getString("u7");
                        zevende = zevende.replace("<br />", " ");
                        zevende = zevende.replace("<c>", " ");
                        zevende = zevende.replace("</c>", " ");
                        String achtste = res.getString("u8");
                        achtste = achtste.replace("<br />", " ");
                        achtste = achtste.replace("<c>", " ");
                        achtste = achtste.replace("</c>", " ");

                        Element dag = doc.createElement(dagen[i]);
                        rootElement.appendChild(dag);

                        //set attribute to dag element
                        dag.setAttribute("id", String.valueOf(i));

                        //1e uur elements
                        Element uur1 = doc.createElement("eerste");
                        uur1.appendChild(doc.createTextNode(eerste));
                        dag.appendChild(uur1);

                        //2e uur elements
                        Element uur2 = doc.createElement("tweede");
                        uur2.appendChild(doc.createTextNode(tweede));
                        dag.appendChild(uur2);

                        //3e uur elements
                        Element uur3 = doc.createElement("derde");
                        uur3.appendChild(doc.createTextNode(derde));
                        dag.appendChild(uur3);

                        //4e uur elements
                        Element uur4 = doc.createElement("vierde");
                        uur4.appendChild(doc.createTextNode(vierde));
                        dag.appendChild(uur4);

                        //5e uur elements
                        Element uur5 = doc.createElement("vijfde");
                        uur5.appendChild(doc.createTextNode(vijfde));
                        dag.appendChild(uur5);

                        //6e uur elements
                        Element uur6 = doc.createElement("zesde");
                        uur6.appendChild(doc.createTextNode(zesde));
                        dag.appendChild(uur6);

                        //7e uur elements
                        Element uur7 = doc.createElement("zevende");
                        uur7.appendChild(doc.createTextNode(zevende));
                        dag.appendChild(uur7);

                        //8e uur elements
                        Element uur8 = doc.createElement("achste");
                        uur8.appendChild(doc.createTextNode(achtste));
                        dag.appendChild(uur8);
                    }
                }
                conn.close();
                //write contents into xml file
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
                DOMSource source = new DOMSource(doc);

                StreamResult result = new StreamResult(new File(getActivity().getFilesDir(), "file.xml"));
                System.out.println("test");
                //Output to console for testing
                //StreamResult result = new StreamResult(System.out);

            } catch (ParserConfigurationException pce) {
                pce.printStackTrace();
            } catch (TransformerException tfe) {
                tfe.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (java.lang.InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

The whole read code is:

public String[] getRooster() throws Exception {
String[] dagen;
dagen = new String[5];
dagen[0] = "maandag";
dagen[1] = "dinsdag";
dagen[2] = "woensdag";
dagen[3] = "donderdag";
dagen[4] = "vrijdag";
int aantDagen = dagen.length;

// bepaal de dag van de week
Calendar c = Calendar.getInstance();
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK)-2;
File XmlFile = new File(getActivity().getFilesDir(), "file.xml");
if (!XmlFile.exists()){
    System.out.println("No XML file!");
}
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(XmlFile);

doc.getDocumentElement().normalize();

NodeList nList = doc.getElementsByTagName(dagen[dayOfWeek]);
Node nNode = nList.item(0);

String dag = nNode.getNodeName().substring(0,1).toUpperCase() + nNode.getNodeName().substring(1);
Element eElement = (Element) nNode;

String eerste = ("1e : " + eElement.getElementsByTagName("eerste").item(0).getTextContent());
String tweede = ("2e : " + eElement.getElementsByTagName("tweede").item(0).getTextContent());
String derde = ("3e : " + eElement.getElementsByTagName("derde").item(0).getTextContent());
String vierde = ("4e : " + eElement.getElementsByTagName("vierde").item(0).getTextContent());
String vijfde = ("5e : " + eElement.getElementsByTagName("vijfde").item(0).getTextContent());
String zesde = ("6e : " + eElement.getElementsByTagName("zesde").item(0).getTextContent());
String zevende = ("7e : " + eElement.getElementsByTagName("zevende").item(0).getTextContent());
String achtste = ("8e : " + eElement.getElementsByTagName("achste").item(0).getTextContent());
return new String[] {dag, eerste, tweede, derde, vierde, vijfde, zesde, zevende, achtste};

Upvotes: 2

Views: 37782

Answers (2)

Coozekoek
Coozekoek

Reputation: 41

Thanks to greenapps I found my solution. As he said my streamresult wasn't doing anything.

I fixed it by replacing

File XmlFile = new File(getActivity().getFilesDir(), "file.xml");

with

FileInputStream XmlFile = getActivity().openFileInput("file.xml");

and replacing

StreamResult result = new StreamResult(new File(getActivity().getFilesDir(),  "rooster.xml"));

with

StreamResult result = new StreamResult(getActivity().openFileOutput("rooster.xml", getActivity().MODE_PRIVATE));

Upvotes: 1

vdmytsyk
vdmytsyk

Reputation: 187

If you use an emulator, probably you didn't set memory for the emulator device. Go to AVD Manager, choose your device, click "Edit", fill in "Internal Storage".

Also you have to add

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

Upvotes: 1

Related Questions