Я хочу сохранить содержимое архива tar.gz в таблице базы данных.
Архив содержит текстовые файлы в формате CSV .
Идея состоит в том, чтобы вставить новую строку в базу данных для каждой строки в текстовых файлах.
Проблема в том, что я не могу прочитать содержимое файла отдельно, а затем перейти к следующему файлу.
Ниже EntryTable и EntryTableLine являются объектами Hibernate.
EntryTable находится в OneToMany с EntryTableLine (файл -EntryTable- может иметь много строк -EntryTableLine-).
public static final int TAB = 9;
FileInputStream fileInputStream = new FileInputStream(fileLocation);
GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);
TarArchiveInputStream tar = new TarArchiveInputStream(gzipInputStream);
BufferedReader reader = new BufferedReader(new InputStreamReader(tar));
// Columns are delimited with TAB
CSVFormat csvFormat = CSVFormat.TDF.withHeader().withDelimeter((char) TAB);
CSVParser parser = new CSVParser(reader, csvFormat);
TarArchiveEntry tarEntry = tar.getNextTarEntry();
while(tarEntry != null){
EntryTable entryTable = new EntryTable();
entryTable.setFilename(tarEntry.getName());
if(reader != null){
// Here is the problem
for(CSVRecord record : parser){
//this could have been a StringBuffer
String line;
int i = 1;
for(String val : record){
line = "<column" + i + ">" + val + "</column" + i + ">";
}
EntryTableLine entryTableLine = new EntryTableLine();
entryTableLine.setContent(line);
entryDao.saveLine(entryTableLine);
}
}
tarEntry = tar.getNextTarEntry();
}
Я пытался преобразовать tarEntry.getFile () в InputStream , но tarEntry.getFile () , к сожалению, пусто.
Допустим, у меня есть 4 файла в архиве.Каждый файл имеет 3 строки внутри.Однако в базе данных некоторые записи имеют 5 строк, а другие - нет.
Спасибо!