Как я могу прочитать несколько XML-файлов из потока ввода в Java и записать их в виде файлов XML?Чтение нескольких XML-файлов из потока ввода Java
У меня есть это:
InputStream is = new GZIPInputStream(new FileInputStream(file));
Edit: У меня есть файл 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
я получаю (это только начало одного файла):
blah.xml 60 0 0 2300 12077203627 10436 0ustar 0 0 <?xml version="1.0"...
ОТВЕТ:
Это работало отлично подходит для меня, следуя по предложению Кейта использовать Apache Сжать и 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();
}
}
Входной поток подключается только к одному файлу за раз. Пожалуйста, подробно расскажите о своей проблеме. – Santosh
http://stackoverflow.com/questions/1080381/gzipinputstream-reading-line-by-line –
Как два файла разделены в потоке? Есть ли делиметр? – f1sh