如何在Java的tar.gz文件中返回特定csv文件的内容?

时间:2020-04-09 20:51:38

标签: java csv tar

我需要从tar.gz文件中的特定csv文件内部获取数据,并验证数据是否正确。

此步骤中我有一个功能文件:

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

步骤定义从CSVData调用readFile():

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

上面的这段代码可以验证文件中的数据,但是我使用此行直接告诉它在哪里可以找到已经解压缩的.csv文件:

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

我需要解压缩tar.gz文件,其中有6个.csv文件,我需要从tar.gz中的“ test_s-sign.csv”文件中获取数据。

我有一个以前使用过的方法来将所有文件名都保存在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;
}

0 个答案:

没有答案