繁体   English   中英

如何在内部存储Android中保存XML文件

[英]How to save an XML file in Internal Storage Android

我已经发布了一个名字相似的问题。 我试图删除它,但是由于它有答案,所以无法删除。 但是,我现在遇到的问题有所不同,因为我陷入了整个方法的困境。 对于可能出现的问题,我深表歉意,并希望您仍然可以帮助我。

这是我的代码:

public void fetchXML(){
    Thread thread = new Thread(new Runnable(){
        @Override
        public void run() {
            try {

                URL url = new URL(urlString);
                HttpURLConnection conn = (HttpURLConnection)
                url.openConnection();
                conn.setReadTimeout(10000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();

                xmlFactoryObject = XmlPullParserFactory.newInstance();
                XmlPullParser myparser = xmlFactoryObject.newPullParser();

                myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES
                        , false);
                myparser.setInput(is, null);
                parseXMLAndStoreIt(myparser);
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    });

    thread.start();
}

解释: fetchXML()位于HandleXML class (HandleXML.java)内,所以它不在MainActivity ,我认为这很重要,同时复制/粘贴有关如何从Web保存文件的代码(观看了教程)。 当我似乎实现如下代码时:

从ANDROID补习页面复制:

String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

我收到openFileOutput错误。

问题:如何保存从fetchXML()获取的InputStream的最简单方法? 代码片段确实是一种滋味。

希望有人能帮忙。 谢谢。

用于在内部存储中创建DOM xml文件的示例:

public void CreateXmlFile(){
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        builder = dbf.newDocumentBuilder();
        Document doc = builder.newDocument();

        // root element
        org.w3c.dom.Element root = doc.createElement("mobile-app");
        doc.appendChild(root);
        //create a comment
        Comment comment=doc.createComment("This is comment");
        //add in the root element
        root.appendChild(comment);

        prettyPrint(doc);
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public final void prettyPrint(Document xml) throws Exception {
    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    Writer out = new StringWriter();
    tf.transform(new DOMSource(xml), new StreamResult(getFilesDir().getAbsolutePath() + "/newXmlFile.xml"));
    System.out.println(out.toString());
}

尝试使用此方法:

public void ConvertingAnInputStreamToAFile(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[inputStream.available()];
    inputStream.read(buffer);

    File targetFile = new File("targetFile.xml"); //<-- Your File Location here
    OutputStream outStream = new FileOutputStream(targetFile);
    outStream.write(buffer);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM