【问题标题】:Android XML: open failed: ENOENT (No such file or directory) , DOMParserAndroid XML:打开失败:ENOENT(没有这样的文件或目录),DOMParser
【发布时间】:2015-07-30 12:45:00
【问题描述】:

我在使用 DOMParserXML 获取存储在名为“infofermata.xml”的 xml 文件中的数据并放置此路径时遇到问题:“xml/infofermata.xml”。 我发现的第一个问题是:"2246-2246/com.example.giacomob.myapplication W/System.err﹕ java.io.FileNotFoundException: /xml\infofermata.xml: open failed: ENOENT (No such file or directory)" 将在此 XML 文件中读取的类是:

package com.example.giacomob.myapplication;

import android.util.Log;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class ReadXMLFile {

     public ReadXMLFile() {

        try {
            Log.i("MyActivity", "casa");
            String filePath = "xml\\infofermata.xml";
            File fXmlFile = new File(filePath);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            //optional, but recommended
            //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("fermata");

            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                System.out.println("\nCurrent Element :" + nNode.getNodeName());
               // Log.i("MyActivity", "casa");

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                   // System.out.println("Staff id : " + eElement.getAttribute("id"));

                   // String stringidfermata = "Id Fermata : " + eElement.getElementsByTagName("idfermata").item(0).getTextContent()"";

                   // Log.i("MyActivity", "\"Id Fermata : \" + eElement.getElementsByTagName(\"idfermata\").item(0).getTextContent()");
                    System.out.println("Id Fermata : " + eElement.getElementsByTagName("idfermata").item(0).getTextContent());
                    System.out.println("Naziome : " + eElement.getElementsByTagName("nazione").item(0).getTextContent());
                    System.out.println("Paese : " + eElement.getElementsByTagName("paese").item(0).getTextContent());
                    System.out.println("Via : " + eElement.getElementsByTagName("via").item(0).getTextContent());

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我认为错误出现在:“ String filePath = "xml\infofermata.xml";",这个路径没有错……请帮帮我!!

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<fermata>
    <idfermata>1</idfermata>
    <nazione>Italia</nazione>
    <paese>Lecce</paese>
    <via>Viale Grassi</via>
</fermata>

谢谢:)

【问题讨论】:

  • 更改文件路径。字符串文件路径 = "xml/infofermata.xml";
  • 感谢@Rubanraj,但我已经尝试过..但不起作用!有关信息,我在 WIndows 8.1 上使用 Android Developer

标签: java android xml xml-parsing domparser


【解决方案1】:

Giacomo,res 文件夹是为应用程序资源保留的,然后要读取其中的文件,您必须使用 getResources() 方法,然后是 getXml()。这个example 有点过时了,但我相信可以帮助你。

如果你想使用 DocumentBuilderFactory 和其他 java 类的 DOM,我建议你把你的 xml 放在“资产”中你的应用程序的文件夹,你得到 InputStream 使用:

AssetManager assetManager = getAssets();
InputStream is = assetManager.open("infofermata.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
[...]
is.close();

希望对你有帮助。

【讨论】:

  • 谢谢@mimmo grotoli.. 但你是意大利人?意大利文吗? così parliamo nella nostra lingua madre magari, così forse capisco un po' meglio..
  • 我想要,但我认为不可能:)
  • okok..:) 这是我第一次使用 Android。从您的回答中,我了解到我必须创建一个名为“assets”的新目录(在主目录中),并将 xml 文件放入此目录中,对吗?
  • 是的,AndroidStudio 应该自动将自定义图标应用到该文件夹​​(与 res 文件夹相同)
  • 没什么...同样的错误...sintax 是真的吗?字符串文件路径 = “资产/infofermata.xml”;文件 fXmlFile = new File(filePath);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多