Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 修改InputStream并将其转换为Outputstream_Java_Xml_Inputstream_Outputstream - Fatal编程技术网

Java 修改InputStream并将其转换为Outputstream

Java 修改InputStream并将其转换为Outputstream,java,xml,inputstream,outputstream,Java,Xml,Inputstream,Outputstream,我正在开发一个程序,在这里我接收一个XML文件作为InputStream。我必须做一些更改,然后将其作为OutputStream返回 这是我的密码: public void execute (InputStream xmlEntrada, OutputStream xmlSalida) { SAXBuilder saxBuilder = new SAXBuilder(); Document document; String idDocCobro, idCobro;

我正在开发一个程序,在这里我接收一个XML文件作为InputStream。我必须做一些更改,然后将其作为OutputStream返回

这是我的密码:

public void execute (InputStream xmlEntrada, OutputStream xmlSalida) {

    SAXBuilder saxBuilder = new SAXBuilder();
    Document document;

    String idDocCobro, idCobro;
    String sociedad, ejercicio, numDocCobro;

    try {

        document = saxBuilder.build(xmlEntrada);

        Element raiz = document.getRootElement();

        List piDocCobros = raiz.getChildren("Pagos");

        for (int i = 0; i < piDocCobros.size(); i++) {

               Element nodePiDocCobros = (Element) piDocCobros.get(i);

               sociedad = nodePiDocCobros.getChildText("Sociedad");
               ejercicio = nodePiDocCobros.getChildText("Ejercicio");
               numDocCobro = nodePiDocCobros.getChildText("NumDocumentoCobro");

               idDocCobro = sociedad + ejercicio + numDocCobro + System.currentTimeMillis();

               nodePiDocCobros.getChild("iddoccobro").setText(idDocCobro);

               List piCobros = nodePiDocCobros.getChildren("Pago");

               for (int y = 0; y < piCobros.size(); y++) {

                   Element nodePiCobros = (Element) piCobros.get(y);

                   nodePiCobros.getChild("iddoccobro").setText(idDocCobro);

                   idCobro = numDocCobro + System.currentTimeMillis();

                   nodePiCobros.getChild("idcobro").setText(idCobro);

                   List piDocumentosRel = nodePiCobros.getChild("DocumentosRelacionados").getChildren("DocumentoRelacionado");

                   for (int z = 0; z < piDocumentosRel.size(); z++) {

                       Element nodePiDocumentosRel = (Element) piDocumentosRel.get(z);

                       nodePiDocumentosRel.getChild("idcobro").setText(idCobro);

                   }

               }
        }  

        copy(xmlEntrada, xmlSalida);

    } catch (JDOMException | IOException e) {
        System.out.println(e.toString());
    }
}   

public static void copy(InputStream in, OutputStream out) throws IOException {

    byte[] buffer = new byte[1024];
    while (true) {
      int bytesRead = in.read(buffer);
      if (bytesRead == -1){
        break;
      }  
      out.write(buffer, 0, bytesRead);
    }
}
public void execute(InputStream xmlEntrada,OutputStream xmlSalida){
SAXBuilder SAXBuilder=新SAXBuilder();
文件;
字符串idDocCobro,idCobro;
字符串sociedad、ejercicio、numDocCobro;
试一试{
document=saxBuilder.build(xmlEntrada);
元素raiz=document.getRootElement();
列表piDocCobros=raiz.getChildren(“Pagos”);
对于(int i=0;i
我的问题是当我试图在函数
copy
中读取XML时,因为流已经关闭,所以我得到了一个异常。当我在程序开头使用
saxBuilder.build
语句时,流会自动关闭。我之前无法将文本保存在
byte[]
变量中,因为我将在程序中对其进行修改

有什么想法吗


提前非常感谢!:)

您读取的InputStream不是包含您所做修改的对象。您的修改在文档对象中


这就是您需要发送到输出流的内容。

您读取的输入流不是包含您所做修改的对象。您的修改在文档对象中


这就是您需要发送到OutputStream的内容。

正如一些人告诉我的,我犯了一个愚蠢的错误。我要做的是将documento传递给OutputStream。我用下一段代码做到了这一点:

XMLOutputter xmlcode = new XMLOutputter();
xmlcode.output(document, xmlSalida);

谢谢大家的帮助

正如你们中的一些人告诉我的,我犯了一个愚蠢的错误。我要做的是将documento传递给OutputStream。我用下一段代码做到了这一点:

XMLOutputter xmlcode = new XMLOutputter();
xmlcode.output(document, xmlSalida);

谢谢大家的帮助

您正在将流读入文档。您应该做的不是复制流-您应该将文档写入输出流。您已经将文档作为
文档
。您不需要再次读取输入流。您可以处理“文档”。不清楚您在问什么。您正在将流读入文档。您应该做的不是复制流-您应该将文档写入输出流。您已经将文档作为
文档
。您不需要再次读取输入流。您可以处理“文档”。不清楚你在问什么。