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()তাই বিশ্রী।
ব্যবহার FilenameUtilsমধ্যে এ্যাপাচি কমন্স আই :
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রিটার্ন একটি অ-নেতিবাচক মান দেয় কারণ জাভাডোক বলে যে এটি ফিরে আসবে
-1 যদি এরকম কোনও ঘটনা না ঘটে
আপনি পাথ = সি: \ হ্যালো \ অন্য ফোল্ডার \ 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 ফাইল` বা এ Paths।
File.separatorএছাড়াও প্ল্যাটফর্মের উপর নির্ভরশীল? বা এই কাজ করবে ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separatorএখানে সর্বদা কাজ করবে না কারণ উইন্ডোজে কোনও ফাইল নাম হয় "/"বা দ্বারা পৃথক করা যায় "\\"।
অন্যান্য উত্তরগুলি আমার নির্দিষ্ট দৃশ্যের জন্য পুরোপুরি কার্যকর হয়নি, যেখানে আমি আমার বর্তমানের চেয়ে ওএস থেকে পৃথক হওয়া পাথগুলি পড়ছি। বিস্তারিত বলতে আমি একটি লিনাক্স সার্ভারে উইন্ডোজ প্ল্যাটফর্ম থেকে সংরক্ষিত ইমেল সংযুক্তিগুলি সংরক্ষণ করছি। জাভামেল এপিআই থেকে ফিরে আসা ফাইলের নামটি 'সি: \ টেম্পিয়াল \ হ্যালো.এক্সলস' এর মতো কিছু is
সমাধানটি দিয়ে আমি শেষ করেছি:
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 কিছুটা বিভ্রান্তিকর কারণ এটি ডিরেক্টরিটির নামও দেয়। এটি কোনও পথে ফাইল বা সর্বশেষ ডিরেক্টরিটির নাম দেয়।
জাভা রেজেেক্স * ব্যবহার করে ফাইলের নাম বের করুন।
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- এর পদ্ধতি.পথ এই পথ অবজেক্ট দ্বারা নির্দেশিত ফাইল বা ডিরেক্টরিটির নাম ফিরিয়ে আনত।
পাথফিটনেম ()
রেফারেন্সের জন্য:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
আপনার ফাইলের সমস্ত তথ্য পেতে আপনি ফাইলআইএনফো অবজেক্টটি ব্যবহার করতে পারেন।
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);