Stringचर एक फ़ाइल नाम, C:\Hello\AnotherFolder\The File Name.PDF। मैं केवल The File Name.PDFएक स्ट्रिंग के रूप में फ़ाइल नाम कैसे प्राप्त करूं?
मैंने स्ट्रिंग को विभाजित करने की योजना बनाई है, लेकिन यह इष्टतम समाधान नहीं है।
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आपके लिए उस मुद्दे का ध्यान रखता है।
Paths.getफ़ाइल सिस्टम तक पहुँच नहीं है, इसलिए प्रदर्शन के विकल्प / अनुक्रमणिका से भौतिक रूप से भिन्न होने की उम्मीद नहीं की जाएगी।
Internet Explorerऔर उसके पास पथ है "C:\\Hello\\AnotherFolder\\The File Name.PDF"लेकिन आपका कोड एक यूनिक्स / लिनक्स मशीन पर काम कर रहा है, फिर 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एक विभाजक के रूप में एक पूरे स्वीकार करता है ।)
मैंने इसे ऊपर के उदाहरण में छोड़ दिया है, लेकिन यदि आप अनिश्चित हैं कि कहां से Stringआता है या इसमें क्या हो सकता है, तो आप यह सत्यापित करना चाहेंगे कि lastIndexOfगैर-नकारात्मक मान लौटाता है क्योंकि Javadoc बताता है कि यह वापस आ जाएगा
-1 अगर ऐसी कोई घटना नहीं है
आप पथ = C: \ Hello \ OtherFolder \ 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हमेशा यहां काम नहीं करेगा क्योंकि विंडोज में फ़ाइलनाम को "/"या तो अलग किया जा सकता है या "\\"।
अन्य उत्तर मेरे विशिष्ट परिदृश्य के लिए काफी काम नहीं करते थे, जहां मैं उन रास्तों को पढ़ रहा हूं जो एक ओएस से मेरे वर्तमान एक से अलग हुए हैं। विस्तृत करने के लिए मैं लिनक्स सर्वर पर विंडोज प्लेटफॉर्म से सहेजे गए ईमेल अटैचमेंट को सहेज रहा हूं। JavaMail API से दिया गया फ़ाइल नाम 'C: \ temp \ hello.xls' जैसा कुछ है
समाधान मैं के साथ समाप्त हो गया:
String filenameWithPath = "C:\\temp\\hello.xls";
String[] tokens = filenameWithPath.split("[\\\\|/]");
String filename = tokens[tokens.length - 1];
इस मामले को ध्यान में रखते हुए कि जावा मल्टीप्लायर है:
int lastPath = fileName.lastIndexOf(File.separator);
if (lastPath!=-1){
fileName = fileName.substring(lastPath+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 regex * का उपयोग करके फाइल का नाम।
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;
}
getFileName () java.nio.file.Path की विधि इस पथ ऑब्जेक्ट द्वारा बताई गई फ़ाइल या निर्देशिका का नाम वापस करती थी।
पथ getFileName ()
सन्दर्भ के लिए:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
आप अपनी फ़ाइल की सभी जानकारी प्राप्त करने के लिए FileInfo ऑब्जेक्ट का उपयोग कर सकते हैं।
FileInfo f = new FileInfo(@"C:\Hello\AnotherFolder\The File Name.PDF");
MessageBox.Show(f.Name);
MessageBox.Show(f.FullName);
MessageBox.Show(f.Extension );
MessageBox.Show(f.DirectoryName);