如何从android资产文件夹的xml文件创建FileOutputStream?

问题描述:

我想将xml节点添加到资产文件夹中存在的现有xml文件favorites.xml中。如何从android资产文件夹的xml文件创建FileOutputStream?

下面是code.It抛出FileNotFoundException异常而行

FileOutputStream fos = new FileOutputStream(myContext.getAssets().openFd("favorites.xml").getFileDescriptor()); 

请帮我解决创建FileOutputStream中。提前谢谢。

代码:

import android.content.Context; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.xml.sax.SAXException; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 


public class XMLWriter{ 

private Context myContext; 
public XMLWriter(Context context) 
{ 
    myContext = context; 
} 

public void AddFavorites(int id) 
{ 
    try 
    { 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 

     Document document = documentBuilder.parse(myContext.getAssets().open("favorites.xml")); 
     Node node = document.getElementsByTagName("favorites").item(0); 

     Element favorite = document.createElement("favorite"); 
     Element idElement = document.createElement("id"); 
     idElement.appendChild(document.createTextNode(Integer.toString(id))); 
     favorite.appendChild(idElement); 
     node.appendChild(favorite); 

     DOMSource source = new DOMSource(document); 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 

     FileOutputStream fos = new FileOutputStream(myContext.getAssets().openFd("favorites.xml").getFileDescriptor()); 
     StreamResult result = new StreamResult(fos); 
     transformer.transform(source, result); 

    } catch (ParserConfigurationException | SAXException | IOException | TransformerException e) { 
     e.printStackTrace(); 
    } 
} 

}

你不能改变资产的文件夹中。它们是只读的。

+0

感谢您的帮助。 – Lucky 2016-12-12 16:51:30

+0

是否可以在资产文件夹中编辑xml? – Lucky 2016-12-12 16:53:10

+0

是的,你可以编辑xml – user3150546 2016-12-14 15:17:56

+0

我的问题是关于在资源文件夹中以编程方式编辑XML。 – Lucky 2016-12-15 16:32:31