从tar中捕获错误并继续处理

时间:2017-06-07 11:52:10

标签: r error-handling

我循环遍历.tar.gz文件列表,解压缩它们并对它们进行一些分析。到现在为止还挺好。问题是,当某些文件损坏时,untar会抛出错误并且处理停止。

我的代码是这样的:

f <- dir(path.to.files, pattern=".tar.gz")
for(k in 1:length(f)){
  # make sure the temporary dir is empty
  file.remove(dir(path = tempdir(), full.names = TRUE)
  untar(f[k], exdir = tempdir())
  # do some analisys with the extracted files
}

我宁愿从untar中捕获错误,跳过该损坏的文件,然后继续我的循环。我已经尝试使用trytryCatch,但没有运气。

有没有办法告诉untar发出警告而不是错误?

1 个答案:

答案 0 :(得分:1)

您可以通过将tryCatch添加到for(i in 1:3) { print(i) if(i == 2) tryCatch(untar("untitled-3.synctex1.gz"), finally=next) } 的finally参数来继续循环。请考虑以下示例。循环从1到3运行并打印迭代值。当值等于2时,R尝试解压缩文件&#34; untitled-3.synctex1.gz&#34;,这在我当前的工作目录中不存在

private List<String> getRowData(int sheetIndex, String fileName)
{
    XSSFWorkbook wb;
    ArrayList<String> columndata = null;

    try {
        wb = new XSSFWorkbook(new FileInputStream(new File(location
                + fileName)));
    XSSFSheet sheet = wb.getSheetAt(sheetIndex);
    Iterator<Row> rowIterator = sheet.iterator();
    columndata = new ArrayList<>();
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            if (row.getRowNum() > 0) { 
                if (cell.getColumnIndex() == 0) {   
                    switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_NUMERIC:
                        columndata.add(cell.getNumericCellValue() + "");
                        break;
                    case Cell.CELL_TYPE_STRING:
                        columndata.add(cell.getStringCellValue());
                        break;
                    }
                }
            }
        }
    }

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
    return columndata;
}
  

[1] 1
  [1] 2
   显示追溯

     

重新运行Debug    gzfile出错(path.expand(tarfile),&#34; rb&#34;):无法打开连接另外:警告信息:
  在gzfile中(path.expand(tarfile),&#34; rb&#34;):     无法打开压缩文件&#39; untitled-3.synctex1.gz&#39;,可能的原因&#39;没有这样的文件或目录&#39;
  [1] 3

我们看到错误消息和警告,但循环继续到下一次迭代并打印第三个值。