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

标签 java xml file input

如何从 Java 的输入流中读取多个 XML 文件并将它们写入 XML 文件?

我有这个:

InputStream is = new GZIPInputStream(new FileInputStream(file));

编辑:我有一个 tar.gz 文件,例如 xmls.tar.gz,它是包含多个 XML 文件的"file"。当我使用以下命令将其转换为字符串时:

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 上我得到(这只是一个文件的开头):

blah.xml    60      0      0        2300 12077203627  10436 0ustar     0      0 <?xml version="1.0"...

答案:

这对我来说非常有用,遵循 Keith 使用 Apache Compress 和 io 的建议:

http://thinktibits.blogspot.com/2013/01/read-extract-tar-file-java-example.html

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();
        }
}

最佳答案

解压缩(gzip)后,您仍然需要解压缩。 java JDK 没有内置的 tar API,但第三方提供了一些 API。请参阅这个答案:How do I extract a tar file in Java?

关于java - 从输入流 Java 读取多个 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700350/

相关文章:

java - 谷歌应用程序引擎中的实体组到底是什么?

java - 根据spring profile导入bean资源

android - 尝试从终端构建时在 ubuntu 上构建 cordova 错误

C:在文件中搜索字符串

python - 如何在一定次数的迭代后创建新列表或新行

java - 为什么 dir.mkdir() 不需要异常处理,而 file.createNewFile() 需要?

java - 如何管理客户端特定配置

java - 使用 Scroll 从 Elasticsearch 检索大量结果需要很长时间

c# - 如何在不包装元素的情况下对多态数组进行 XML 序列化

c# - 将 Treeviews 放在 TabControl 内容页面中