মানক মাভেন সেটআপ ধরে নিই।
আপনার সংস্থান ফোল্ডারে বলুন আপনার কাছে একটি ফাইল আছে abc
।
জাভাতে, আমি কীভাবে দয়া করে ফাইলটির সম্পূর্ণ পথ পেতে পারি?
মানক মাভেন সেটআপ ধরে নিই।
আপনার সংস্থান ফোল্ডারে বলুন আপনার কাছে একটি ফাইল আছে abc
।
জাভাতে, আমি কীভাবে দয়া করে ফাইলটির সম্পূর্ণ পথ পেতে পারি?
উত্তর:
ClassLoader.getResource
সঠিক সংস্থান পেতে আপনি পদ্ধতিটি ব্যবহার করতে পারেন ।
URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();
বা
যদিও এটি সবসময় কাজ না করে, একটি সহজ সমাধান -
আপনি একটি File
অবজেক্ট তৈরি করতে পারেন এবং getAbsolutePath
পদ্ধতিটি ব্যবহার করতে পারেন :
File file = new File("resources/abc.txt");
String absolutePath = file.getAbsolutePath();
target/classes/abc.txt
ফাইলটি রেফারেন্স করা উচিত , কারণ এটি হ'ল প্রামাণ্য জায়গা যেখানে প্রক্রিয়া করার পরে মাভেন রিসোর্স ফাইল রাখে (উদাহরণস্বরূপ, মভেন-রিসোর্স প্লাগইনটি abc.txt এ সম্পত্তি পরিবর্তনের কাজ করতে পারে)। ক্লাসপথ থেকে getResource () এর মাধ্যমে abc.txt ব্যবহার করা আরও ভাল।
প্রকৃতপক্ষে সঠিকভাবে কাজ করে:
URL resource = YourClass.class.getResource("abc");
Paths.get(resource.toURI()).toFile();
ক্লাসপথের ফাইলটি শারীরিকভাবে যেখানে এখন তা বিবেচ্য নয়, যতক্ষণ রিসোর্সটি আসলে কোনও ফাইল এবং জআর এন্ট্রি নয় ততক্ষণ এটি পাওয়া যাবে।
(আপাতদৃষ্টিতে সুস্পষ্টভাবে new File(resource.getPath())
সমস্ত পাথের জন্য কাজ করে না! পথটি এখনও ইউআরএল-এনকোডড!)
new File(resource.toURI()).getAbsolutePath();
(যেমন আমি মনে করি না যে আপনাকে পাথ অবজেক্টের দরকার আছে?)
new File(YourClass.class.getResource("abc").toURI().getPath())
যদি চান তবে পর্যায়ক্রমে করতে পারেন।
.getResource("/abc")
আপনার প্রয়োজনীয় ক্লাসের ক্লাসলুডার উদাহরণটি তৈরি করুন, তারপরে আপনি ফাইলগুলি বা সংস্থানগুলি সহজেই অ্যাক্সেস করতে পারবেন। এখন আপনি getPath()
সেই শ্রেণীর পদ্ধতি ব্যবহার করে পাথ অ্যাক্সেস করতে পারেন ।
ClassLoader classLoader = getClass().getClassLoader();
String path = classLoader.getResource("chromedriver.exe").getPath();
System.out.println(path);
কোনও ফাইল বা ফাইলপথ ফেরত দিতে
URL resource = YourClass.class.getResource("abc");
File file = Paths.get(resource.toURI()).toFile(); // return a file
String filepath = Paths.get(resource.toURI()).toFile().getAbsolutePath(); // return file path
পরম পথে আমাদের পথে দুটি সমস্যা রয়েছে:
নিম্নলিখিত কোডটি আমাদের সমস্ত কার্যকর পাথ দেবে:
URL localPackage = this.getClass().getResource("");
URL urlLoader = YourClassName.class.getProtectionDomain().getCodeSource().getLocation();
String localDir = localPackage.getPath();
String loaderDir = urlLoader.getPath();
System.out.printf("loaderDir = %s\n localDir = %s\n", loaderDir, localDir);
এখানে উভয় ফাংশন যা রিসোর্স ফোল্ডারের স্থানীয়করণের জন্য ব্যবহার করা যেতে পারে তা গবেষণা করা হয়। হিসাবে class
, এটি কোনও উপায়ে, স্থিতিশীল বা গতিশীলভাবে পাওয়া যেতে পারে।
যদি প্রকল্পটি প্লাগইনে না থাকে, JUnit এ চালিত কোডটি মুদ্রণ করবে:
loaderDir = /C:.../ws/source.dir/target/test-classes/
localDir = /C:.../ws/source.dir/target/test-classes/package/
সুতরাং, এসসিআর / বিশ্রাম / সংস্থানগুলিতে যাওয়ার জন্য আমাদের ফাইল ট্রি উপরে এবং নীচে যাওয়া উচিত। উভয় পদ্ধতি ব্যবহার করা যেতে পারে। লক্ষ্য করুন, আমরা ব্যবহার করতে পারি না getResource(resourceFolderName)
, কারণ সেই ফোল্ডারটি লক্ষ্য ফোল্ডারে নেই। আশা করি কেউ তৈরি ফোল্ডারে সংস্থান রাখে না।
ক্লাসটি প্লাগইনে থাকা প্যাকেজে থাকলে একই পরীক্ষার আউটপুট হবে:
loaderDir = /C:.../ws/plugin/bin/
localDir = /C:.../ws/plugin/bin/package/
সুতরাং, আবার আমাদের ফোল্ডার ট্রি উপরে এবং নীচে যেতে হবে।
প্যাকেজটি প্লাগ-ইন চালু হওয়ার পরে সবচেয়ে আকর্ষণীয় বিষয়টি । JUnit প্লাগইন পরীক্ষা হিসাবে, আমাদের উদাহরণ হিসাবে। আউটপুটটি হ'ল:
loaderDir = /C:.../ws/plugin/
localDir = /package/
এখানে আমরা উভয় ফাংশনের ফলাফলের সংমিশ্রণে পরম পথ পেতে পারি । এবং এটি যথেষ্ট নয়। তাদের মধ্যে আমাদের সেই ক্লাসের প্যাকেজগুলির স্থানের স্থানীয় পথটি তুলনামূলকভাবে প্লাগইন ফোল্ডারে রাখা উচিত। সম্ভবত, আপনাকে এখানে src
বা src/test/resource
এখানে কিছু সন্নিবেশ করতে হবে ।
আপনি কোডটি নিজের মধ্যে sertোকাতে এবং আপনার যে পাথগুলি রয়েছে তা দেখতে পারেন।