Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java用流结果覆盖文件_Java_Xml_File_Stream_Overwrite - Fatal编程技术网

Java用流结果覆盖文件

Java用流结果覆盖文件,java,xml,file,stream,overwrite,Java,Xml,File,Stream,Overwrite,我创建了一个简单的类来创建XML文档。 但是,如果在创建同名文档时多次调用该方法,则该文件不会覆盖。 如何使类自动覆盖同名的现有文件? import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.x

我创建了一个简单的类来创建XML文档。 但是,如果在创建同名文档时多次调用该方法,则该文件不会覆盖。 如何使类自动覆盖同名的现有文件? import java.io.File;

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;

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

public class XMLCreater { public static void CreateXMLDoc(String name, String root, String[] elements, String[] children) throws TransformerConfigurationException { try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement(root); doc.appendChild(rootElement);

        for (int i = 0; i < elements.length; i ++) {
            Element element = doc.createElement(elements[i]);
                element.appendChild(doc.createTextNode(children[i]));
            rootElement.appendChild(element);
        }
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        File dir = new File(System.getProperty("user.dir"));
        StreamResult result =  new StreamResult(new File(dir + "\\XML\\" + name + ".xml"));
        transformer.transform(source, result);
    }
    catch(ParserConfigurationException pce){
          pce.printStackTrace();
    } catch(TransformerException tfe) {
         tfe.printStackTrace();
    }
}
导入java.io.File

导入javax.xml.parsers.DocumentBuilder; 导入javax.xml.parsers.DocumentBuilderFactory; 导入javax.xml.parsers.parserConfiguration异常; 导入javax.xml.transform.Transformer; 导入javax.xml.transform.TransformerConfiguration异常; 导入javax.xml.transform.TransformerException; 导入javax.xml.transform.TransformerFactory; 导入javax.xml.transform.dom.DOMSource; 导入javax.xml.transform.stream.StreamResult

导入org.w3c.dom.Document; 导入org.w3c.dom.Element

公共类XMLCreater{ public static void CreateXMLDoc(字符串名称、字符串根、字符串[]元素、字符串[]子元素)引发TransformerConfiguration异常{ 试一试{ DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder=docFactory.newDocumentBuilder(); Document doc=docBuilder.newDocument(); Element rootElement=doc.createElement(根); doc.appendChild(rootElement)

for(int i=0;i
}

我用以下语句执行了您的代码:

public static void main (String[] args) 
{
    XMLCreater x = new XMLCreater();
    String[] s = {"A","B","C"};
    try 
    {
        x.CreateXMLDoc("k","root",s,s);
        x.CreateXMLDoc("k","root",s,s);
        x.CreateXMLDoc("fakih","root",s,s);
    }
    catch (TransformerConfigurationException exception) 
    { exception.printStackTrace(); }
}

它很好地覆盖了现有的文件,覆盖没有问题,请自己检查。

我在这里说实话。。。我无法复制你的问题。当我在for循环中多次运行这个程序时,它对我来说很好。您确定在运行程序之前没有意外打开结果文件,从而锁定它吗

如果您想让多个线程同时运行您的程序,也许可以应用
synchronized
块来防止两个线程试图写入相同的文件,如下所示:-

...

synchronized (XMLCreater.class) {
    StreamResult result = new StreamResult(new File(dir + "\\XML\\" + name + ".xml"));
    transformer.transform(source, result);
}

会发生什么?什么Java版本?我所说的覆盖是指多次运行程序。。。如果您运行该程序一次,它将创建文件,然后如果您再次运行该程序,它将尝试覆盖该文件,除非该文件变为空。。。