Java 修改InputStream并将其转换为Outputstream
我正在开发一个程序,在这里我接收一个XML文件作为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;
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);
谢谢大家的帮助 您正在将流读入文档。您应该做的不是复制流-您应该将文档写入输出流。您已经将文档作为
文档
。您不需要再次读取输入流。您可以处理“文档”。不清楚您在问什么。您正在将流读入文档。您应该做的不是复制流-您应该将文档写入输出流。您已经将文档作为文档
。您不需要再次读取输入流。您可以处理“文档”。不清楚你在问什么。