답변:
단지 사용 ) (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
당신을 위해 그 문제를 처리합니다.
Paths.get
파일 시스템에 액세스 한다고 생각하지 않으므로 성능이 하위 문자열 / indexOf와 실질적으로 다를 것으로 기대하지 않습니다.
Internet Explorer
하고 경로가 "C:\\Hello\\AnotherFolder\\The File Name.PDF"
있지만 코드가 Unix / Linux 시스템에서 작동하는 경우 p.getFileName()
뿐만 아니라 전체 경로를 반환합니다 The File Name.PDF
.
toString()
가 너무 어색합니다.
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
경로 = C : \ Hello \ AnotherFolder \ TheFileName.PDF를 사용할 수 있습니다.
String strPath = path.substring(path.lastIndexOf("\\")+1, path.length());
/
유닉스와 \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like
File` 또는 Paths
.
File.separator
플랫폼에 종속도? 아니면이게 효과가 String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separator
Windows에서는 파일 이름을 "/"
또는 로 분리 할 수 있기 때문에 항상 여기서 작동하지는 않습니다 "\\"
.
다른 답변은 현재 시나리오와 다른 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];
의존성이없고 .. , . 및 중복 분리기.
public static String getFileName(String filePath) {
if( filePath==null || filePath.length()==0 )
return "";
filePath = filePath.replaceAll("[/\\\\]+", "/");
int len = filePath.length(),
upCount = 0;
while( len>0 ) {
//remove trailing separator
if( filePath.charAt(len-1)=='/' ) {
len--;
if( len==0 )
return "";
}
int lastInd = filePath.lastIndexOf('/', len-1);
String fileName = filePath.substring(lastInd+1, len);
if( fileName.equals(".") ) {
len--;
}
else if( fileName.equals("..") ) {
len -= 2;
upCount++;
}
else {
if( upCount==0 )
return fileName;
upCount--;
len -= fileName.length();
}
}
return "";
}
테스트 사례 :
@Test
public void testGetFileName() {
assertEquals("", getFileName("/"));
assertEquals("", getFileName("////"));
assertEquals("", getFileName("//C//.//../"));
assertEquals("", getFileName("C//.//../"));
assertEquals("C", getFileName("C"));
assertEquals("C", getFileName("/C"));
assertEquals("C", getFileName("/C/"));
assertEquals("C", getFileName("//C//"));
assertEquals("C", getFileName("/A/B/C/"));
assertEquals("C", getFileName("/A/B/C"));
assertEquals("C", getFileName("/C/./B/../"));
assertEquals("C", getFileName("//C//./B//..///"));
assertEquals("user", getFileName("/user/java/.."));
assertEquals("C:", getFileName("C:"));
assertEquals("C:", getFileName("/C:"));
assertEquals("java", getFileName("C:\\Program Files (x86)\\java\\bin\\.."));
assertEquals("C.ext", getFileName("/A/B/C.ext"));
assertEquals("C.ext", getFileName("C.ext"));
}
getFileName은 디렉토리 이름도 반환하기 때문에 약간 혼동 될 수 있습니다. 경로에서 파일 이름 또는 마지막 디렉토리를 리턴합니다.
java 정규식 *를 사용하여 파일 이름을 추출하십시오.
public String extractFileName(String fullPathFile){
try {
Pattern regex = Pattern.compile("([^\\\\/:*?\"<>|\r\n]+$)");
Matcher regexMatcher = regex.matcher(fullPathFile);
if (regexMatcher.find()){
return regexMatcher.group(1);
}
} catch (PatternSyntaxException ex) {
LOG.info("extractFileName::pattern problem <"+fullPathFile+">",ex);
}
return fullPathFile;
}
이 경로 오브젝트가 가리키는 파일 또는 디렉토리의 이름을 리턴하는 데 사용되는 java.nio.file.Path의 getFileName () 메소드.
경로 getFileName ()
참고로 :
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/