سؤال

ولدي String التي توفر مسار مطلق إلى ملف (بما في ذلك اسم الملف). أريد الحصول على اسم فقط للملف. ما هو أسهل طريقة للقيام بذلك؟

وانها تحتاج الى أن تكون عامة بقدر الإمكان كما لا أستطيع أن أعرف مقدما ما URL سيكون. لا أستطيع ببساطة إنشاء كائن URL واستخدام getFile() - على الرغم من كل ما من شأنه أن يكون مثاليا إذا كان من الممكن - كما انها ليست بالضرورة بادئة http:// أنها يمكن أن تكون ج: / أو شيئا من هذا القبيل

هل كانت مفيدة؟

المحلول

new File(fileName).getName();

أو

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;

لاحظ أن الحل الأول هو نظام يعتمد. إلا أنه يأخذ طابع مسار فاصل النظام في الاعتبار. حتى إذا كان يتم تشغيل التعليمات البرمجية على نظام يونكس ويحصل على مسار Windows، فإنه لن ينجح. هذا هو الحال عند معالجة تحميل الملفات المرسلة من قبل Internet Explorer.

نصائح أخرى

new File(absolutePath).getName();
يوفر

أباتشي العموم IO الطبقة FilenameUtils التي تعطيك مجموعة غنية جدا من الوظائف ذات المنفعة لبسهولة الحصول على المكونات المختلفة للأسماء، على الرغم من الطبقة java.io.File توفر الأساسيات.

أباتشي العموم IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);

وهنا 2 طرق (كلاهما OS مستقل).

وعن طريق Paths: منذ 1.7

Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();

وعن طريق FilenameUtils في أباتشي العموم IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top