উত্তর:
আপনি, আমার মত, বরং এমন কি হয় যদি আপনি মধ্যে পাস কিছু গ্রন্থাগার কোড যেখানে তারা সম্ভবত সব বিশেষ ক্ষেত্রে চিন্তা আছে, ব্যবহার করেন তাহলে নাল পাথ কিন্তু ফাইলের নাম নেই বা বিন্দু, আপনি নিম্নলিখিত ব্যবহার করতে পারেন:
import org.apache.commons.io.FilenameUtils;
String fileNameWithOutExt = FilenameUtils.removeExtension(fileNameWithExt);
java.nio.file.Files
এবং Path
- যেমন সমাধানে বেস ডিরেক্টরি, এক লাইন কপি / চলন্ত ফাইল, শুধুমাত্র ফাইলের নাম পেয়ে যেমন ইত্যাদি
সবচেয়ে সহজ উপায় হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করা।
fileNameWithOutExt = "test.xml".replaceFirst("[.][^.]+$", "");
উপরের এক্সপ্রেশনটি এক বা একাধিক অক্ষর দ্বারা অনুসরণ করা শেষ বিন্দুটি সরিয়ে ফেলবে। এখানে একটি বেসিক ইউনিট পরীক্ষা।
public void testRegex() {
assertEquals("test", "test.xml".replaceFirst("[.][^.]+$", ""));
assertEquals("test.2", "test.2.xml".replaceFirst("[.][^.]+$", ""));
}
org.apache.commons
। আমি যতদূর সচেতন, এটি অ্যান্ড্রয়েডে করার একমাত্র উপায়।
নিম্নলিখিত পরীক্ষা প্রোগ্রাম দেখুন:
public class javatemp {
static String stripExtension (String str) {
// Handle null case specially.
if (str == null) return null;
// Get position of last '.'.
int pos = str.lastIndexOf(".");
// If there wasn't any '.' just return the string as is.
if (pos == -1) return str;
// Otherwise return the string, up to the dot.
return str.substring(0, pos);
}
public static void main(String[] args) {
System.out.println ("test.xml -> " + stripExtension ("test.xml"));
System.out.println ("test.2.xml -> " + stripExtension ("test.2.xml"));
System.out.println ("test -> " + stripExtension ("test"));
System.out.println ("test. -> " + stripExtension ("test."));
}
}
কোন ফলাফল:
test.xml -> test
test.2.xml -> test.2
test -> test
test. -> test
foo.tar.gz
? আপনি দেখতে চাইলে কেন .tar.gz
হবে তা আমি দেখতে পাচ্ছি ।
foo.tar.gz
একটি গিজিপড সংস্করণ foo.tar
তাই আপনি এটি যুক্তিও দিতে পারেন যে gz
এটি এক্সটেনশন ছিল। এটি কীভাবে আপনি এক্সটেনশানটি সংজ্ঞায়িত করেন তা নেমে আসে ।
.gitignore
?
এখানে আমার পছন্দ অনুসারে একীভূত তালিকার অর্ডার দেওয়া আছে।
অ্যাপাচি কমন্স ব্যবহার করা
import org.apache.commons.io.FilenameUtils;
String fileNameWithoutExt = FilenameUtils.getBaseName(fileName);
OR
String fileNameWithOutExt = FilenameUtils.removeExtension(fileName);
গুগল পেয়ারা ব্যবহার করা (আপনি যদি ইতিমধ্যে এটি ব্যবহার করেন)
import com.google.common.io.Files;
String fileNameWithOutExt = Files.getNameWithoutExtension(fileName);
বা কোর জাভা ব্যবহার করে
1)
String fileName = file.getName();
int pos = fileName.lastIndexOf(".");
if (pos > 0 && pos < (fileName.length() - 1)) { // If '.' is not the first or last character.
fileName = fileName.substring(0, pos);
}
2)
if (fileName.indexOf(".") > 0) {
return fileName.substring(0, fileName.lastIndexOf("."));
} else {
return fileName;
}
3)
private static final Pattern ext = Pattern.compile("(?<=.)\\.[^.]+$");
public static String getFileNameWithoutExtension(File file) {
return ext.matcher(file.getName()).replaceAll("");
}
লাইফ্রেয় এপিআই
import com.liferay.portal.kernel.util.FileUtil;
String fileName = FileUtil.stripExtension(file.getName());
যদি আপনার প্রকল্পে পেয়ারা (14.0 বা আরও নতুন) ব্যবহার হয় তবে আপনি যেতে পারেন Files.getNameWithoutExtension()
।
(মূলত FilenameUtils.removeExtension()
অ্যাপাচি কমন্স আইও-র মত একইরকম , যেমন সর্বাধিক ভোটের জবাব দেয়, কেবল পেয়ারা এটিও করতে চেয়েছিলেন Pers ব্যক্তিগতভাবে আমি কমন্সে নির্ভরতা যুক্ত করতে চাইনি I যা আমি মনে করি এটি কিছুটা অবলম্বন — শুধু এই কারণে।)
FilenameUtils.getBaseName()
নীচে https://android.googlesource.com/platfor/tools/tradefederation/+/master/src/com/android/tradefed/util/FileUtil.java থেকে রেফারেন্স দেওয়া আছে
/**
* Gets the base name, without extension, of given file name.
* <p/>
* e.g. getBaseName("file.txt") will return "file"
*
* @param fileName
* @return the base name
*/
public static String getBaseName(String fileName) {
int index = fileName.lastIndexOf('.');
if (index == -1) {
return fileName;
} else {
return fileName.substring(0, index);
}
}
আপনি যদি পুরো অ্যাপাচি.কমগুলি আমদানি করতে পছন্দ না করেন তবে আমি একই কার্যকারিতাটি বের করেছি:
public class StringUtils {
public static String getBaseName(String filename) {
return removeExtension(getName(filename));
}
public static int indexOfLastSeparator(String filename) {
if(filename == null) {
return -1;
} else {
int lastUnixPos = filename.lastIndexOf(47);
int lastWindowsPos = filename.lastIndexOf(92);
return Math.max(lastUnixPos, lastWindowsPos);
}
}
public static String getName(String filename) {
if(filename == null) {
return null;
} else {
int index = indexOfLastSeparator(filename);
return filename.substring(index + 1);
}
}
public static String removeExtension(String filename) {
if(filename == null) {
return null;
} else {
int index = indexOfExtension(filename);
return index == -1?filename:filename.substring(0, index);
}
}
public static int indexOfExtension(String filename) {
if(filename == null) {
return -1;
} else {
int extensionPos = filename.lastIndexOf(46);
int lastSeparator = indexOfLastSeparator(filename);
return lastSeparator > extensionPos?-1:extensionPos;
}
}
}
আমি যখন গ্রন্থাগার পুনরায় ব্যবহার করার ক্ষেত্রে বড় বিশ্বাসী তখনই org.apache.commons.io JAR 174KB, যা একটি মোবাইল অ্যাপ্লিকেশনের জন্য উল্লেখযোগ্যভাবে বড়।
আপনি যদি সোর্স কোডটি ডাউনলোড করেন এবং তাদের ফাইলনাম ইউটিলেস ক্লাসটি একবার দেখে থাকেন তবে দেখতে পাবেন যে এখানে প্রচুর অতিরিক্ত ইউটিলিটি রয়েছে এবং এটি উইন্ডোজ এবং ইউনিক্স পাথগুলির সাথে মানিয়ে নিতে পারে যা সমস্ত মনোরম।
তবে আপনি যদি ইউনিক্স স্টাইলের পাথ ("/" বিভাজক সহ) ব্যবহারের জন্য কেবল কয়েকটি স্ট্যাটিক ইউটিলিটি পদ্ধতি চান তবে নীচের কোডটি দরকারী হিসাবে পেতে পারেন।
removeExtension
পদ্ধতি ফাইলের নাম সহ পাথ বাকি অপরিবর্তিত। এছাড়াও একটি অনুরূপ আছে getExtension
।
/**
* Remove the file extension from a filename, that may include a path.
*
* e.g. /path/to/myfile.jpg -> /path/to/myfile
*/
public static String removeExtension(String filename) {
if (filename == null) {
return null;
}
int index = indexOfExtension(filename);
if (index == -1) {
return filename;
} else {
return filename.substring(0, index);
}
}
/**
* Return the file extension from a filename, including the "."
*
* e.g. /path/to/myfile.jpg -> .jpg
*/
public static String getExtension(String filename) {
if (filename == null) {
return null;
}
int index = indexOfExtension(filename);
if (index == -1) {
return filename;
} else {
return filename.substring(index);
}
}
private static final char EXTENSION_SEPARATOR = '.';
private static final char DIRECTORY_SEPARATOR = '/';
public static int indexOfExtension(String filename) {
if (filename == null) {
return -1;
}
// Check that no directory separator appears after the
// EXTENSION_SEPARATOR
int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
int lastDirSeparator = filename.lastIndexOf(DIRECTORY_SEPARATOR);
if (lastDirSeparator > extensionPos) {
LogIt.w(FileSystemUtil.class, "A directory separator appears after the file extension, assuming there is no file extension");
return -1;
}
return extensionPos;
}
public static String getFileExtension(String fileName) {
if (TextUtils.isEmpty(fileName) || !fileName.contains(".") || fileName.endsWith(".")) return null;
return fileName.substring(fileName.lastIndexOf(".") + 1);
}
public static String getBaseFileName(String fileName) {
if (TextUtils.isEmpty(fileName) || !fileName.contains(".") || fileName.endsWith(".")) return null;
return fileName.substring(0,fileName.lastIndexOf("."));
}
আপেক্ষিক পথ বা পুরো পাথ থেকে নাম পাওয়ার সহজ উপায়টি ব্যবহার করা হচ্ছে
import org.apache.commons.io.FilenameUtils;
FilenameUtils.getBaseName(definitionFilePath)
আপনি এটি দ্বারা বিভক্ত করতে পারেন। " এবং সূচীতে 0 টি ফাইলের নাম এবং 1 এ এক্সটেনশন হয় তবে আমি প্রথমে নিবন্ধে উল্লিখিত যেমন apache.commons-io থেকে ফাইলনাম ইউটিলেস দিয়ে সেরা সমাধানের দিকে ঝুঁকতে চাই। এটি অপসারণ করতে হবে না, তবে যথেষ্ট:
String fileName = FilenameUtils.getBaseName("test.xml");
অ্যাপাচি কমন্স আইওFilenameUtils.removeExtension
থেকে ব্যবহার করুন
উদাহরণ:
আপনি পুরো পথের নাম বা কেবল ফাইলের নাম সরবরাহ করতে পারেন ।
String myString1 = FilenameUtils.removeExtension("helloworld.exe"); // returns "helloworld"
String myString2 = FilenameUtils.removeExtension("/home/abc/yey.xls"); // returns "yey"
আশাকরি এটা সাহায্য করবে ..
এটিকে সহজ করে রাখলে জাভা এর স্ট্রিং.রেপসএল () পদ্ধতিটি নীচে ব্যবহার করুন:
String fileNameWithExt = "test.xml";
String fileNameWithoutExt
= fileNameWithExt.replaceAll( "^.*?(([^/\\\\\\.]+))\\.[^\\.]+$", "$1" );
ফাইলনেম উইথেক্সট-এ সম্পূর্ণরূপে যোগ্যতাসম্পন্ন পাথ অন্তর্ভুক্ত করার সময় এটিও কাজ করে।
এক্সটেনশান থেকে ফাইলের নামটি বিভক্ত করতে আপনি জাভা স্প্লিট ফাংশন ব্যবহার করতে পারেন, যদি আপনি নিশ্চিত হন যে ফাইলনামে কেবল একটি বিন্দু রয়েছে যা এক্সটেনশনের জন্য।
File filename = new File('test.txt');
File.getName().split("[.]");
সুতরাং split[0]
"টেস্ট" এবং বিভক্ত [1] "txt" ফিরে আসবে
নীচের কোড ব্যবহার করে দেখুন। কোর জাভা বেসিক ফাংশন ব্যবহার করে। এটি String
এক্সটেনশন সহ এবং এক্সটেনশন ছাড়াই ( '.'
চরিত্র ব্যতীত) যত্ন নেয় । একাধিকের '.'
বিষয়টিও আচ্ছন্ন।
String str = "filename.xml";
if (!str.contains("."))
System.out.println("File Name=" + str);
else {
str = str.substring(0, str.lastIndexOf("."));
// Because extension is always after the last '.'
System.out.println("File Name=" + str);
}
আপনি এটি null
স্ট্রিং দিয়ে কাজ করতে অভিযোজিত করতে পারেন ।
.
ফাইলের নাম নেই বা ফাইল একটি ব্যাকআপ এবং নামটির মতো রয়েছে document.docx.backup
ইত্যাদি)। বাহ্যিক গ্রন্থাগারটি ব্যবহার করা এটি আরও নির্ভরযোগ্য যা আপনার জন্য এই সমস্ত ব্যতিক্রমী পরিস্থিতি নিয়ে কাজ করে।