Как вернуть содержимое указанного c CSV-файла, который находится внутри файла tar.gz в Java? - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно получить данные изнутри указанного c csv-файла, который находится в файле tar.gz, и проверить правильность данных.

У меня есть файл функций с этим шагом:

And I verify the CSV file 'test_s-sign.csv' contains the following:
| i.ri_g,i.ri_p,i.es_n,i.es_f |
| 1.1.1.1,124,1.1.1.1,33      |
| 2.2.2.2,124,1.1.1.1,66      |

Файл определения шага с этим шагом:

@And("I verify the CSV file {string} contains the following:")
public void iVerifyCSVFileContains(String fileName, List<String> expected) throws IOException {
   String csvfile = "/home/smith/Downloads/" + fileName;
   List<String> csvdata = CSVData.readFile(csvfile);
   assertThat(String.format("Expected to see:\n %s\nFound:\n %s\n", expected.toString(), csvdata.toString()), expected.equals(csvdata));
}

Определение шага вызывает readFile () из CSVData:

public static List<String> readFile(String csvfile) throws IOException {
   List<String> lines = new ArrayList<>();

   try {
       File file = new File(csvfile);
       FileReader fr = new FileReader(file);
       BufferedReader br = new BufferedReader(fr);
       String line = null;

       while((line = br.readLine()) != null) {
          lines.add(line);
          }
       br.close();
       } catch(IOException ioe) {
       ioe.printStrackTrace();
   }
   return lines;
}

Этот код выше работает для проверьте данные в файле, но я использую эту строку, чтобы напрямую указать, где go найти уже извлеченный файл .csv:

String csvfile = "/home/smith/Downloads/" + fileName;

Мне нужно извлечь файл tar.gz. , который имеет 6 файлов .csv внутри него, и мне нужно получить данные только из файла "test_s-sign.csv" в tar.gz.

У меня есть метод, который я использовал прежде чем получить все имена файлов внутри файла tar.gz, и я уверен, что мне нужно использовать это с тем, что у меня уже есть выше, но я просто не понимаю, как это сделать.

public List<String> getFilesInTar(String filename) {
  List<String> foundFiles = Lists.newArrayList();
  String filePath = System.getProperty("user.home") + File.separator + "Downloads" + File.separator + filename;
  try {
      TarArchiveInputStream tarInput = new TarArchiveInputStream(
            new GZIPInputStream(
                 new BufferedInputStream(
                      new FileInputStream(filePath))));
      TarArchiveEntry entry;
      while ((entry = tarInput.getNextTarEntry()) != null) {
          if (!entry.isDirectory()) {
              foundFiles.add(entry.getName());
          }
      }
      tarInput.close();
  } catch (IOException ex) {
      log.error(ex.getMessage());
  }
  return foundFiles;
}
...