Я бы изменил ваш new File(...)
на new File(dest, tarEntry.getName());
(при условии, что dest
- это File
- в вашем коде не видно, откуда оно).
И самое главное, вам нужно убедиться, что вы создаете каталоги, в которых вы пытаетесь создать файлы. Это может быть сделано:
destPath.getParent().mkdirs();
Важно .getParent()
, так как мы не можем создать папку для каждой части имени файла, иначе имя файла также будет создано как папка вместо файла, а затем попытка записать в него данные ошибка (так как вместо папки, которая будет существовать, ожидается файл).
Для получения "базового" lpa_1_454_20111117011749
имени из чего-то вроде lpa_1_454_20111117011749.tar.gz
:
String tarFileName = "/tmp/lpa_1_454_20111117011749.tar.gz";
// Non-regular expression approach:
{
int lastPath = tarFileName.lastIndexOf('/');
if(lastPath >= 0){
lastPath++;
}
int endName = tarFileName.length();
if(tarFileName.endsWith(".tar.gz")){
endName -= 7;
}
String baseName = tarFileName.substring(lastPath, endName);
System.out.println(baseName);
}
// Regular expression approach:
{
Pattern p = Pattern.compile("(?:.*/|^)(.*)\\.tar\\.gz");
Matcher m = p.matcher(tarFileName);
if(m.matches()){
System.out.println(m.group(1));
}
}
Выводы любого подхода:
lpa_1_454_20111117011749