Apache Commons CLI লাইব্রেরি সাধারণত কমান্ড লাইন আর্গুমেন্ট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। তবে, যদি আপনি চান যে ব্যবহারকারীরা একটি কনফিগারেশন ফাইল থেকে কমান্ড লাইন আর্গুমেন্ট বা সেটিংস লোড করতে পারে, তবে আপনি External Configuration File ব্যবহার করতে পারেন।
এটি খুবই উপকারী যখন আপনি একটি প্রোজেক্টে অনেকগুলো আর্গুমেন্ট বা কনফিগারেশন সেটিংস রাখতে চান এবং তা সহজে পরিবর্তনযোগ্য করতে চান। আপনি YAML, JSON বা প্রপার্টি ফাইল ব্যবহার করে কনফিগারেশন স্টোরেজ হিসেবে ব্যবহার করতে পারেন এবং তারপর এই কনফিগারেশনগুলি কমান্ড লাইন আর্গুমেন্টের সাথে একত্রে পার্স করতে পারেন।
এখানে, আমরা দেখবো কিভাবে একটি External Configuration File (যেমন .properties ফাইল) ব্যবহার করে কমান্ড লাইন আর্গুমেন্টের মান লোড করা যায় এবং সেই মানগুলো Apache Commons CLI এর সাথে ইন্টিগ্রেট করা যায়।
1. External Configuration ফাইল তৈরি করা
আপনি একটি কনফিগারেশন ফাইল (যেমন .properties ফাইল) তৈরি করতে পারেন, যা কমান্ড লাইন আর্গুমেন্টের জন্য ডিফল্ট মান সরবরাহ করবে।
উদাহরণ: config.properties ফাইল
name=John Doe
age=30
flag=true
options=opt1,opt2,opt3
এই ফাইলটিতে আমরা কিছু সাধারণ কনফিগারেশন সেটিংস রেখেছি, যেমন name, age, flag, এবং options।
2. Java কোডে External Configuration ফাইল লোড করা
এখন, আমরা এই config.properties ফাইলটিকে Java কোডে লোড করব এবং সেটিকে Apache Commons CLI এর সাথে ব্যবহার করব। প্রথমে, আপনাকে Java এর Properties ক্লাস ব্যবহার করে এই ফাইলটি লোড করতে হবে এবং তারপর এই মানগুলিকে কমান্ড লাইন আর্গুমেন্টের সাথে মিশিয়ে নিতে হবে।
উদাহরণ: External Configuration ফাইল লোড করা এবং Apache Commons CLI এর সাথে ব্যবহার
import org.apache.commons.cli.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Arrays;
public class CommandLineExample {
public static void main(String[] args) {
// Properties অবজেক্ট তৈরি করা
Properties properties = new Properties();
// কনফিগারেশন ফাইল লোড করা
try (FileInputStream input = new FileInputStream("config.properties")) {
properties.load(input);
} catch (IOException e) {
System.out.println("Error loading configuration file: " + e.getMessage());
return;
}
// Option অবজেক্ট তৈরি করা
Options options = new Options();
// --name অপশন (আর্গুমেন্টের সাথে)
options.addOption("n", "name", true, "Your name");
// --age অপশন (আর্গুমেন্টের সাথে)
options.addOption("a", "age", true, "Your age");
// --flag অপশন (ফ্ল্যাগ, আর্গুমেন্ট ছাড়াই)
options.addOption("f", "flag", false, "Activate flag");
// --options অপশন (কমা দ্বারা পৃথক একাধিক আর্গুমেন্ট)
options.addOption("o", "options", true, "Comma separated list of options");
// CommandLineParser ব্যবহার করা
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
// কমান্ড লাইন আর্গুমেন্ট পার্স করা
cmd = parser.parse(options, args);
// --name অপশন চেক করা এবং কনফিগারেশন ফাইল থেকে মান সেট করা
if (!cmd.hasOption("n") && properties.containsKey("name")) {
cmd.addOption("n", properties.getProperty("name"));
}
// --age অপশন চেক করা এবং কনফিগারেশন ফাইল থেকে মান সেট করা
if (!cmd.hasOption("a") && properties.containsKey("age")) {
cmd.addOption("a", properties.getProperty("age"));
}
// --flag অপশন চেক করা এবং কনফিগারেশন ফাইল থেকে মান সেট করা
if (!cmd.hasOption("f") && properties.containsKey("flag")) {
cmd.addOption("f", properties.getProperty("flag"));
}
// --options অপশন চেক করা এবং কনফিগারেশন ফাইল থেকে মান সেট করা
if (!cmd.hasOption("o") && properties.containsKey("options")) {
cmd.addOption("o", properties.getProperty("options"));
}
// নাম অপশন চেক করা
if (cmd.hasOption("n")) {
String name = cmd.getOptionValue("n");
System.out.println("Name: " + name);
}
// বয়স অপশন চেক করা
if (cmd.hasOption("a")) {
String age = cmd.getOptionValue("a");
System.out.println("Age: " + age);
}
// ফ্ল্যাগ অপশন চেক করা
if (cmd.hasOption("f")) {
System.out.println("Flag is activated!");
}
// options অপশন চেক করা
if (cmd.hasOption("o")) {
String optionsValue = cmd.getOptionValue("o");
String[] optionsArray = optionsValue.split(",");
System.out.println("Options: " + Arrays.toString(optionsArray));
}
} catch (ParseException e) {
System.out.println("Parsing failed. Reason: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineExample", options);
}
}
}
ব্যাখ্যা:
- Properties ফাইল লোড করা:
FileInputStreamব্যবহার করেconfig.propertiesফাইলটি লোড করা হয়।properties.load(input)ফাংশনটি ফাইল থেকে কনফিগারেশন মানগুলি লোড করে।
- Command Line Argument Handling:
- প্রথমে
Apache Commons CLIব্যবহার করে কমান্ড লাইন আর্গুমেন্টগুলি পার্স করা হয়। - তারপর কনফিগারেশন ফাইল থেকে মানগুলির জন্য চেক করা হয় এবং যদি আর্গুমেন্টটি না থাকে, তবে কনফিগারেশন ফাইল থেকে মান যোগ করা হয়।
- প্রথমে
- Options এবং CommandLine Parsing:
cmd.addOption()ব্যবহার করে কনফিগারেশন ফাইল থেকে পাওয়া মানগুলি কমান্ড লাইন আর্গুমেন্টগুলির সাথে মিশিয়ে দেয়া হয়।
3. External Configuration File Example Usage
উদাহরণ 1: config.properties ফাইলের সাথে কমান্ড চালানো
কনফিগারেশন ফাইল config.properties থেকে আর্গুমেন্ট লোড করতে, আপনাকে নিম্নলিখিত কমান্ড লাইন ব্যবহার করতে হবে:
java CommandLineExample -n Jane -a 28
এবং যদি আপনি কনফিগারেশন ফাইলের আর্গুমেন্ট ব্যবহার করতে চান:
java CommandLineExample
আউটপুট:
Name: John Doe
Age: 30
Flag is activated!
Options: [opt1, opt2, opt3]
যেহেতু কনফিগারেশন ফাইলটি আর্গুমেন্টগুলির জন্য ডিফল্ট মান সরবরাহ করছে, এতে নির্দিষ্ট মানের প্রয়োজন না হলেও এই মানগুলো cmd এ যুক্ত হয়ে যাবে।
সারাংশ
Apache Commons CLI এবং External Configuration File এর মাধ্যমে আপনি খুব সহজেই কমান্ড লাইন আর্গুমেন্ট পরিচালনা করতে পারেন। Properties ফাইল ব্যবহার করে আপনি আর্গুমেন্টের জন্য ডিফল্ট মান সঞ্চয় করতে পারেন এবং এই মানগুলিকে কমান্ড লাইন আর্গুমেন্টের সাথে মিশিয়ে ব্যবহার করতে পারেন। FileInputStream এর মাধ্যমে কনফিগারেশন ফাইল লোড করে এবং cmd.addOption() ব্যবহার করে কমান্ড লাইন আর্গুমেন্টের সাথে কনফিগারেশন মান একত্রিত করা যায়।
Read more