我循环遍历.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中捕获错误,跳过该损坏的文件,然后继续我的循环。我已经尝试使用try
和tryCatch
,但没有运气。
有没有办法告诉untar
发出警告而不是错误?
答案 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
我们看到错误消息和警告,但循环继续到下一次迭代并打印第三个值。