2013-07-16 2 views
5

파일 이름에서 확장자를 추출해야합니다. tar.gz와 같은 특별한 경우에 파일 확장자 가져 오기

나는이 filePath.lastIndexOf('.')를 사용하거나 아파치 평민-IO에서 FilenameUtils.getExtension(filePath) 같은 유틸리티 방법을 사용하여 .gz 또는 .tar 같은 하나의 확장에 수행 할 수 있습니다 알고 있습니다.

그러나 .tar.gz과 같은 확장명의 파일이 있다면 어떻게해야합니까? .자를 포함하는 확장명을 가진 파일을 관리하려면 어떻게해야합니까?

+4

사실 확장 프로그램은'.tar.gz '가 아닙니다. 확장은 - 정의에 의해 - .gz입니다. '.tar '부분은 정보를 제공하기위한 것입니다. 파일이'.test.zip'으로 끝나면 확장자'.zip'을 고려할 것입니다. 그렇지 않습니까? –

+1

과'commons-io-2.4.jar'이이 경우에는 무엇을 기대합니까? – vels4j

+0

@ThorstenDittmar * .tgz와 마찬가지로 합당한 * .tar.gz를 처리하는 것은 여전히 ​​합리적입니다. – Ingo

답변

3

중요한 확장 프로그램을 알고 있다면 간단히 명시 적으로 확인할 수 있습니다.

List<String> EXTS = Arrays.asList("tar.gz", "tgz", "gz", "zip"); 

당신은 이런 식으로 (처음으로) 가장 긴 일치 확장을 얻을 수 :

String getExtension(String fileName) { 
    String found = null; 
    for (String ext : EXTS) { 
    if (fileName.endsWith("." + ext)) { 
     if (found == null || found.length() < ext.length()) { 
     found = ext; 
     } 
    } 
    } 
    return found; 
} 

그래서 getExtension("file.tar.gz")를 호출하면 "tar.gz"을 반환이 같은 알려진 확장의 컬렉션을 가질 것입니다. 당신이 혼합 된 경우 이름이있는 경우

, 아마도 루프 내에서 filename.toLowerCase().endsWith("." + ext)에 체크를 변경해보십시오.

0

간단한 방법을 찾았습니다. substring을 사용하여 파일 이름 만 가져오고 lastIndexOf 대신 indexOf을 사용하여 첫 번째 '를 얻으십시오.' 그 이후의 확장

+2

그래서'program.logs.tar.gz' 파일을 주면 프로그램에서 확장 기능을 어떻게 고려할 수 있습니까? –

+0

동의합니다. 버전 번호가 삽입 된 파일에는이 기능이 작동하지 않습니다. – grkvlt

0

경로의 파일 이름 부분을 .으로 분할하고 배열의 마지막 0, 1 또는 2 요소를 확장자로 사용할 수 있습니다.

물론 .tar.* (gz, bz2 등)이 유일한 경우라면 .tar의 파일 이름을 필터링하는 솔루션을 구축하는 것이 실용적 일 수 있습니다. .tar 부분을 포함하도록 확장을 추출 할 지점으로 사용하십시오.

2

파일 하나의 확장자 만있을 수 있습니다!

당신이 파일 test.tar.gz이있는 경우,

  • .gz은 확장 및
  • test.tar되는 기본 이름입니다!

.tar이 경우 확장자가 아닌 기본 이름의 일부입니다!

파일을 targz으로 인코딩하려면 .tgz으로 전화해야합니다. .tar.gz을 사용하는 것은 바람직하지 않습니다.이 파일을 처리해야하는 경우 파일의 이름을 test.tgz으로 바꾸는 등의 해결 방법을 찾아야합니다.

+1

다른 것으로 시작하십시오 : "확장 기능"은 어떤 응용 프로그램이 무엇이든 그것을 정의하는 것입니다. OS 관점에서 볼 때 "확장"과 같은 것은 없습니다. – Ingo

+0

OS pov, hm ... FS pov에서 더 많이 말할 수 있습니다. –

관련 문제