我需要从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;
}