[java] 절대 파일 경로를 포함하는 문자열에서 파일 이름을 어떻게 얻습니까?

String변수는 파일 이름을 포함합니다 C:\Hello\AnotherFolder\The File Name.PDF. 파일 이름 The File Name.PDF을 문자열 로만 얻는 방법은 무엇입니까?

문자열을 분할하려고했지만 최적의 솔루션은 아닙니다.



답변

단지 사용 ) (File.getName를

File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");
System.out.println(f.getName());

사용하여 문자열 방법 :

  File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");
System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));


답변

Path(자바 7+)를 사용하는 대안 :

Path p = Paths.get("C:\\Hello\\AnotherFolder\\The File Name.PDF");
String file = p.getFileName().toString();

\\파일 구분 기호가 다를 수 있으므로 문자열 분할 은 플랫폼에 따라 다릅니다. Path#getName당신을 위해 그 문제를 처리합니다.


답변

Apache Commons IOFilenameUtils 에서 사용 :

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");


답변

String당신이 요구하는 것을 고려하면

C:\Hello\AnotherFolder\The File Name.PDF

마지막 구분 기호 이후의 모든 것을 추출해야합니다. \. 그것이 우리가 관심을 갖는 것입니다.

넌 할 수있어

String fullPath = "C:\\Hello\\AnotherFolder\\The File Name.PDF";
int index = fullPath.lastIndexOf("\\");
String fileName = fullPath.substring(index + 1);

이 마지막의 인덱스를 검색합니다 \당신에 String에 뒤에 오는 추출물 다 fileName.

당신이이 경우 String다른 구분과 함께를 조정 lastIndexOf하는 구분 기호를 사용할 수 있습니다. ( 전체 를 구분자로 받아들이 는 과부하 조차 있습니다 String.)

위의 예제에서 생략했지만 Java 출처가 어디에서 왔는지 String또는 포함 할 수 있는지 확실하지 않은 경우 Javadoc 이 반환 할 것이라고 말했기lastIndexOf 때문에 음수가 아닌 값을 반환 하는지 확인하고 싶을 것입니다

그러한 발생이 없으면 -1


답변

1.7 이후

    Path p = Paths.get("c:\\temp\\1.txt");
    String fileName = p.getFileName().toString();
    String directory = p.getParent().toString();


답변

경로 = C : \ Hello \ AnotherFolder \ TheFileName.PDF를 사용할 수 있습니다.

String strPath = path.substring(path.lastIndexOf("\\")+1, path.length());


답변

다른 답변은 현재 시나리오와 다른 OS에서 시작된 경로를 읽는 특정 시나리오에서 제대로 작동하지 않았습니다. 좀 더 정교하게 말하자면 Linux 서버의 Windows 플랫폼에서 저장된 전자 메일 첨부 파일을 저장합니다. JavaMail API에서 반환 된 파일 이름은 ‘C : \ temp \ hello.xls’와 같습니다.

내가 끝내는 해결책은 다음과 같습니다.

String filenameWithPath = "C:\\temp\\hello.xls";
String[] tokens = filenameWithPath.split("[\\\\|/]");
String filename = tokens[tokens.length - 1];