Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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输入流读取多个XML文件_Java_Xml_File_Input - Fatal编程技术网

从Java输入流读取多个XML文件

从Java输入流读取多个XML文件,java,xml,file,input,Java,Xml,File,Input,如何从Java中的输入流中读取多个XML文件,并将其作为XML文件写入 我有这个: InputStream is = new GZIPInputStream(new FileInputStream(file)); 编辑:我有一个tar.gz文件,比如xmls.tar.gz,它是一个包含多个XML文件的“文件”。当我使用以下命令将其转换为字符串时: public static String convertStreamToString(java.io.InputStream is) {

如何从Java中的输入流中读取多个XML文件,并将其作为XML文件写入

我有这个:

InputStream is = new GZIPInputStream(new FileInputStream(file));
编辑:我有一个tar.gz文件,比如xmls.tar.gz,它是一个包含多个XML文件的“文件”。当我使用以下命令将其转换为字符串时:

public static String convertStreamToString(java.io.InputStream is) {
        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";
    }
我将所有的XML文件链接在一起,并包含文件信息。 在
System.out.println上(这只是一个文件的开头):


在取消压缩(gzip)之后,仍然需要取消tar。javajdk没有用于tar的内置API,但是第三方提供了一些API。请参阅此答案:

一个inputstream一次只连接到一个文件。请详细说明您的问题。这两个文件在流中是如何分开的?有delimeter吗?我的InputStream不是=new GZIPInputStream(new FileInputStream(file));将你链接的问题中的答案准确地编码为建议的内容?不,请阅读已接受/第一个答案以外的答案。第一个答案是GzipInputStream,它只为tar中的所有文件提供一个字节流。如果您想自己解析这些字节以找出tar的每个组件的结束位置,等等,那么这是可以的。最好使用一个更高级别的API,它允许您在“TarEntry”之类的对象上循环,并从每个字节中获取一个输入流,表示tar中的每个(在您的例子中)XML文件。后面的答案展示了如何使用来自不同库的代码来实现这一点。我会调查的。
blah.xml    60      0      0        2300 12077203627  10436 0ustar     0      0 <?xml version="1.0"...
import java.io.*;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.io.IOUtils;
public class unTar {  
        public static void main(String[] args) throws Exception{
                /* Read TAR File into TarArchiveInputStream */
                TarArchiveInputStream myTarFile=new TarArchiveInputStream(new FileInputStream(new File("tar_ball.tar")));
                /* To read individual TAR file */
                TarArchiveEntry entry = null;
                String individualFiles;
                int offset;
                FileOutputStream outputFile=null;
                /* Create a loop to read every single entry in TAR file */
                while ((entry = myTarFile.getNextTarEntry()) != null) {
                        /* Get the name of the file */
                        individualFiles = entry.getName();
                        /* Get Size of the file and create a byte array for the size */
                        byte[] content = new byte[(int) entry.getSize()];
                        offset=0;
                        /* Some SOP statements to check progress */
                        System.out.println("File Name in TAR File is: " + individualFiles);
                        System.out.println("Size of the File is: " + entry.getSize());                  
                        System.out.println("Byte Array length: " + content.length);
                        /* Read file from the archive into byte array */
                        myTarFile.read(content, offset, content.length - offset);
                        /* Define OutputStream for writing the file */
                        outputFile=new FileOutputStream(new File(individualFiles));
                        /* Use IOUtiles to write content of byte array to physical file */
                        IOUtils.write(content,outputFile);              
                        /* Close Output Stream */
                        outputFile.close();
                }               
                /* Close TarAchiveInputStream */
                myTarFile.close();
        }
}