একটি নির্দিষ্ট ফাইলের কেবল পিতামাতার ডিরেক্টরি নাম কীভাবে পাবেন


111

dddপরীক্ষার.জভা যে পথের নাম থেকে কীভাবে পাবেন ।

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
এটি কি জেনেরিক ফাইলের জন্য, বা আপনি কি আপনার উত্স ফাইলের পিতামহিত ডিরেক্টরিটি পাওয়ার চেষ্টা করছেন? যদি তবে, আমি নিশ্চিত নই যে আপনি জাভা সংকলনটি বুঝতে পেরেছেন। রানটাইমের সময়, test.javaসম্ভবত কম্পিউটারটি চালানো হচ্ছে না যেখানে প্রোগ্রামটি চলছে। এটি .classচালিত সংকলিত ফাইল। সুতরাং এটি কেবল তখনই কাজ করবে যদি আপনি জানেন যে কোথায় dddঅবস্থিত, কোন ক্ষেত্রে এটির অগ্রগতিযুক্ত অনুসন্ধান করার কোনও অর্থ নেই; ঠিক এটি হার্ড কোড।
মার্ক পিটারস

উত্তর:


141

Fileএর getParentFile()পদ্ধতিটি ব্যবহার করুন এবং কেবলমাত্র তাত্ক্ষণিক অভিভাবকত্ব ডিরেক্টরি String.lastIndexOf()পুনরুদ্ধার করতে ।

মার্কের মন্তব্যটি এর চেয়ে ভাল সমাধান lastIndexOf():

file.getParentFile().getName();

এই সমাধানগুলি কেবল তখনই কাজ করে যদি এই ফাইলটির একটি পিতামাতার ফাইল থাকে (উদাহরণস্বরূপ, পিতা-মাতা গ্রহণকারী কোনও ফাইল নির্মাণকারীর মাধ্যমে তৈরি করা হয় File)। কখন getParentFile()নাল হবে আপনার ব্যবহারের অবলম্বন করতে হবে lastIndexOf, বা অ্যাপাচি কমন্স এরFileNameUtils.getFullPath() মতো কিছু ব্যবহার করতে হবে :

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

উপসর্গ এবং অনুসরণকারী বিভাজককে ধরে রাখতে / ছাড়ার জন্য বেশ কয়েকটি রূপ রয়েছে। আপনি FilenameUtilsফলাফল, ব্যবহার lastIndexOfইত্যাদি থেকে নাম দখল করতে একই শ্রেণি ব্যবহার করতে পারেন


14
আপনার দরকার নেই lastIndexOf, শুধু ব্যবহার করুন file.getParentFile().getName()
মার্ক পিটারস

13
শুধু ক্ষেত্রে। যদি এটি ফিরে আসে null(আপনি যদি Fileআপেক্ষিক পাথ দিয়ে উদাহরণ তৈরি করেন ) - চেষ্টা করুন file.getAbsoluteFile().getParentFile().getName()
নিদু

1
@ মার্কপিটারগুলি কেবল তখনই কাজ করে যখন ফাইলটি প্যারেন্ট ফাইল দিয়ে তৈরি করা হয়েছিল, যদিও আমি অনুমান করছি যে এটি খুব কমই ঘটে।
ডেভ নিউটন

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() নাল হতে পারে, তাই আপনার এটি পরীক্ষা করা উচিত।


1
কেবলমাত্র নিশ্চিত করার জন্য, আউটপুটটি নিম্নরূপ: সি: / এএএ / বিবিবি / সিসি / ডিডিডি
গাই অভ্রাহাম

16

নীচে ব্যবহার করুন,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

অন্তর্নিহিত ফাইলটি না থাকলেও এই পদ্ধতির একটি পিতামাতার সেট থাকা উচিত বলে উল্লেখযোগ্য।
পেস

13

জাভা 7-এ আপনার নতুন পথের এপিআই রয়েছে । আধুনিক এবং পরিষ্কার সমাধানটি হ'ল:

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

ফলাফল হবে:

C:/aaa/bbb/ccc/ddd

5

আপনার যদি কেবল স্ট্রিং পাথ থাকে এবং নতুন ফাইল অবজেক্ট তৈরি করতে না চান আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

public static String getParentDirPath(String fileOrDirPath) {
    boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
    return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar, 
            endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}

4
আপনি যদি ইতিমধ্যে মূল অবস্থানটিতে থাকেন তবে এটি অ্যারেআউটআউটবাউন্ডসেক্সশনটি ছুড়ে ফেলেছে - "/" -
জ্নমগ্রি

2
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"

আপনার যদি অন্য পথ ব্যবহারের মাধ্যমে ফোল্ডার "ডিডিডি" যুক্ত করতে হয়;

String currentFolder= "/" + currentPath.getName().toString();

1

জাভা 7 থেকে আমি পাথ ব্যবহার করতে পছন্দ করব। আপনাকে কেবল এতে প্রবেশ করতে হবে:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

এবং কিছু পেতে পদ্ধতি তৈরি করুন:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

গ্রোভিতে:

Fileগ্রোভিতে স্ট্রিংটি পার্স করার জন্য কোনও উদাহরণ তৈরি করার দরকার নেই । এটি নিম্নলিখিত হিসাবে করা যেতে পারে:

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

বিভাজন অ্যারে তৈরি করবে [C:, aaa, bbb, ccc, ddd, test.java]এবং সূচকটি -2শেষের আগে প্রবেশের দিকে নির্দেশ করবে, যা এই ক্ষেত্রেddd


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.