Java 7 경로의 확장을 확인하는 방법


84

Path (Java 7에서 도입 됨)가 특정 확장으로 끝나는 지 확인하고 싶습니다 . 나는 다음 endsWith()과 같은 방법을 시도했다 .

Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
    //Do stuff
}

그러나 이것은 path.endsWith(".java")false를 반환 하기 때문에 작동하지 않는 것 같습니다 . 이 endsWith()메서드는 최종 디렉터리 구분 기호 (예 :) 다음에 모든 항목이 완전히 일치하는 경우에만 true를 반환 하는 것 같습니다 bar.java.

그렇다면 Path의 파일 확장자를 어떻게 확인할 수 있습니까?



1
@assylias, 그 질문은 a String가 아닌 a 에서 확장자를 찾는 Path것입니다 (물론 작동 Path.toString()하지만 필요하지 않은 방법을 바랬습니다).
Thunderforge

파일 확장자의 개념은 OS에 따라 다르므로 파일 또는 경로에 대한 지원이 없다고 생각합니다.
assylias 2013

@assylias : 글쎄, 그거 안돼. 파일 확장자의 개념은 잘 정의되어 있으며 Windows / Linux / MacOs / Android에서 여러 번 사용됩니다. Windows보다 Linux에서 덜 중요 할 수 있지만 여전히 데스크톱 및 서버 응용 프로그램에서 많이 사용됩니다.
Eric Duminil

답변:


84

Java NIO의 PathMatcherFileSystem.getPathMatcher (String syntaxAndPattern)를 제공합니다 .

PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");

Path filename = ...;
if (matcher.matches(filename)) {
    System.out.println(filename);
}

자세한 내용은 파일 찾기 튜토리얼을 참조하십시오.


14
별표가없는 것 같습니다. 다음이 저에게 효과적입니다.PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
Josh

22
서로 다른 디렉토리를 찾고 있다면, 당신은 사용할 필요 "글로브 ** 자바를."
LaGrandMere

1
나를 위해 LaGrandMere의 의견이 트릭을 수행했습니다. @Dave Jarvis가 선택한 답변에 그의 조언을 병합 할 수 있다면 NIO-API의 초보자에게 도움이 될 것 같습니다. Windoze에서 : 내가 사용하려는 경우 glob:*.java, 다음 filename어떤 부모 경로를 포함하지 않아야합니다. rel / abs 경로를 사용 glob:c:/users/muchwow/*.java하면 작동합니다 (\\\\는 백 슬래시와 함께 사용해야 함). 패턴 glob:**.java은 부모 경로에 관계없이 * .java가 포함 된 모든 항목을 검색합니다.
JackLeEmmerdeur

67

Path파일 시스템 자체가없는 탓 클래스는, "확장"의 개념이 없습니다. 그렇기 때문에 String표현 을 확인하고 4 개의 5 개 문자열로 끝나는 지 확인해야 합니다 .java. 및 다음 endsWith과 같은 혼합 대소 문자를 포함하려면 단순 비교와 다른 비교가 필요합니다 .".JAVA"".Java"

path.toString().toLowerCase().endsWith(".java");

가능한 NullPointer 때문에 이것은 좋은 해결책이 아닙니다. 위에서 언급 한대로 일부 라이브러리 (예 : apache IO 유틸리티) 또는 PathMatcher를 사용하는 것이 좋습니다.
KHanusova 2011

15

간단한 솔루션 :

if( path.toString().endsWith(".java") ) //Do something

Path.endsWith 메서드를 사용할 때주의해야합니다. 언급했듯이이 메서드는 Path 개체의 하위 요소와 일치하는 경우에만 true 를 반환 합니다. 예를 들면 :

Path p = Paths.get("C:/Users/Public/Mycode/HelloWorld.java");
System.out.println(p.endsWith(".java")); // false
System.out.println(p.endsWith("HelloWorld.java")); // true

3

Path 개체 자체에서이 작업을 직접 수행 할 수있는 방법은 없습니다.

볼 수있는 두 가지 옵션이 있습니다.

  1. 경로를 파일로 변환하고 File.getName ()에서 반환 된 문자열에 대해 endsWith를 호출합니다.
  2. 경로에서 toString을 호출하고 해당 문자열에서 endsWith를 호출하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.