ওহে! আজ আমরা জাভা প্রিন্টস্ট্রিম ক্লাস এবং এটি যা করতে পারে সে সম্পর্কে কথা বলব। প্রকৃতপক্ষে, আপনি ইতিমধ্যেই প্রিন্টস্ট্রিম ক্লাসের দুটি পদ্ধতির সাথে পরিচিত। এগুলি হল print() এবং println() , যা আপনি সম্ভবত প্রতিদিন ব্যবহার করেন :) যেহেতু System.out ভেরিয়েবল একটি PrintStream অবজেক্ট, আপনি যখন System.out.println() কল করেন তখন আপনি এই ক্লাসের একটি পদ্ধতিকে কল করছেন । প্রিন্টস্ট্রিম ক্লাসের সাধারণ উদ্দেশ্য হল কিছু স্ট্রীমে তথ্য পাঠানো। এই শ্রেণীর বেশ কয়েকটি কনস্ট্রাক্টর রয়েছে। এখানে সবচেয়ে বেশি ব্যবহৃত কিছু আছে:
- প্রিন্টস্ট্রীম(আউটপুট স্ট্রীম আউটপুট স্ট্রীম)
- প্রিন্টস্ট্রিম(ফাইল আউটপুটফাইল) FileNotFoundException নিক্ষেপ করে
- প্রিন্টস্ট্রিম(স্ট্রিং আউটপুটফাইলনাম) ফাইলনটফাউন্ডএক্সেপশন নিক্ষেপ করে
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class Main {
public static void main(String arr[]) throws FileNotFoundException
{
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
filePrintStream.println(222);
filePrintStream.println("Hello world");
filePrintStream.println(false);
}
}
এই কোডটি ডেস্কটপে একটি test.txt ফাইল তৈরি করবে (যদি এটি ইতিমধ্যেই বিদ্যমান না থাকে) এবং ক্রমানুসারে এটিতে আমাদের নম্বর, স্ট্রিং এবং বুলিয়ান লিখবে। আমরা প্রোগ্রাম চালানোর পরে এখানে ফাইল বিষয়বস্তু আছে:
222
Hello world!
false
আমরা উপরে বলেছি, আপনাকে একটি ফাইল অবজেক্ট পাস করতে হবে না । কনস্ট্রাক্টরের কাছে ফাইল পাথটি পাস করার জন্য এটি যথেষ্ট:
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class Main {
public static void main(String arr[]) throws FileNotFoundException
{
PrintStream filePrintStream = new PrintStream("C:\\Users\\Username\\Desktop\\test.txt");
filePrintStream.println(222);
filePrintStream.println("Hello world");
filePrintStream.println(false);
}
}
এই কোডটি আগের কোডের মতোই করে। আমাদের মনোযোগের জন্য আরেকটি আকর্ষণীয় পদ্ধতি হল printf() , যা একটি ফর্ম্যাট স্ট্রিং এর উপর ভিত্তি করে আউটপুট তৈরি করে। একটি "ফরম্যাট স্ট্রিং" কি? আমাকে একটি উদাহরণ দিতে দাও:
import java.io.IOException;
import java.io.PrintStream;
public class Main {
public static void main(String[] args) throws IOException {
PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt");
printStream.println("Hello!");
printStream.println("I'm a robot!");
printStream.printf("My name is %s. I am %d!", "Amigo", 18);
printStream.close();
}
}
এখানে, স্ট্রিংয়ে আমাদের রোবটের নাম এবং বয়স স্পষ্টভাবে উল্লেখ করার পরিবর্তে, আমরা এই তথ্যের জন্য স্থানধারক রাখি, %s এবং %d দ্বারা প্রতিনিধিত্ব করা হয় । এবং আমরা যুক্তি হিসাবে পাস যে তথ্য তাদের প্রতিস্থাপন করবে. আমাদের ক্ষেত্রে, এটি হল " Amigo " এবং 18 নম্বর স্ট্রিং৷ আমরা অন্য একটি স্থানধারক তৈরি করতে পারি, %b বলুন এবং অন্য একটি যুক্তি পাস করতে পারি৷ আমাদের কেন এটা দরকার? সর্বোপরি, বৃহত্তর নমনীয়তার জন্য। যদি আপনার প্রোগ্রামের জন্য আপনাকে প্রায়ই একটি স্বাগত বার্তা প্রদর্শন করতে হয়, তাহলে আপনাকে প্রতিটি নতুন রোবটের জন্য প্রয়োজনীয় পাঠ্য ম্যানুয়ালি টাইপ করতে হবে। আপনি এমনকি এই টেক্সট একটি ধ্রুবক করতে পারবেন না, যেহেতু প্রত্যেকের আলাদা আলাদা নাম এবং বয়স আছে! কিন্তু এই নতুন পদ্ধতি ব্যবহার করে, আপনি একটি ধ্রুবক অভিবাদনকে বিচ্ছিন্ন করতে পারেন এবং প্রয়োজনে, শুধুমাত্র printf () পদ্ধতিতে পাস করা আর্গুমেন্টগুলি পরিবর্তন করতে পারেন।
import java.io.IOException;
import java.io.PrintStream;
public class Main {
private static final String GREETINGS_MESSAGE = "My name is %s. I am %d!";
public static void main(String[] args) throws IOException {
PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt");
printStream.println("Hello!");
printStream.println("We are robots!");
printStream.printf(GREETINGS_MESSAGE, "Amigo", 18);
printStream.printf(GREETINGS_MESSAGE, "R2-D2", 35);
printStream.printf(GREETINGS_MESSAGE, "C-3PO", 35);
printStream.close();
}
}
System.in প্রতিস্থাপন করা হচ্ছে
এই পাঠে, আমরা "সিস্টেমের সাথে লড়াই করব" এবং শিখব কিভাবে System.in ভেরিয়েবলকে প্রতিস্থাপন করতে হয় যাতে আমরা যেখানে চাই সেখানে সিস্টেম আউটপুট পুনঃনির্দেশিত করতে। আপনি হয়তো ভুলে যেতে পারেন যে System.in কি, কিন্তু কোন CodeGym ছাত্র এই গঠনটি কখনও ভুলে যাবে না:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in (ঠিক System.out এর মত) হল সিস্টেম ক্লাসের একটি স্ট্যাটিক ভেরিয়েবল । কিন্তু System.out এর বিপরীতে , এটি অন্য একটি ক্লাস উল্লেখ করে, যথা InputStream । ডিফল্টরূপে, System.in হল একটি স্ট্রীম যা একটি সিস্টেম ডিভাইস থেকে ডেটা পাঠ করে — কীবোর্ড। যাইহোক, System.out এর মতোই , আমরা কীবোর্ডটিকে ডেটা উৎস হিসাবে প্রতিস্থাপন করতে পারি। আমরা যেখানে খুশি ডাটা পড়তে পারি! আসুন একটি উদাহরণ দেখি:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
String greetings = "Hi! My name is Amigo!\nI'm learning Java on the CodeGym website.\nOne day I will become a cool programmer!\n";
byte[] bytes = greetings.getBytes();
InputStream inputStream = new ByteArrayInputStream(bytes);
System.setIn(inputStream);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = reader.readLine())!= null) {
System.out.println(str);
}
}
}
তাহলে আমরা কি করেছি? System.in সাধারণত কীবোর্ডের সাথে আবদ্ধ থাকে। কিন্তু আমরা কীবোর্ড থেকে ডেটা পড়তে চাই না: আসুন একটি সাধারণ স্ট্রিং থেকে ডেটা পড়তে দিন! আমরা একটি স্ট্রিং তৈরি করেছি এবং এটি একটি বাইট অ্যারে হিসাবে পেয়েছি। কেন আমরা বাইট প্রয়োজন? জিনিসটি হল যে ইনপুটস্ট্রিম একটি বিমূর্ত শ্রেণী, তাই আমরা সরাসরি এটির একটি উদাহরণ তৈরি করতে পারি না। আমাদের তার বংশধরদের মধ্যে একজনকে বেছে নিতে হবে। উদাহরণস্বরূপ, আমরা ByteArrayInputStream নির্বাচন করতে পারি । এটি সহজ, এবং এটির নাম একাই আমাদের বলে যে এটি কীভাবে কাজ করে: এর ডেটা উত্স একটি বাইট অ্যারে। তাই আমরা একটি বাইট অ্যারে তৈরি করি এবং এটি আমাদের স্ট্রিমের কনস্ট্রাক্টরের কাছে প্রেরণ করি যা ডেটা পড়বে। এবং এখন সবকিছু প্রস্তুত! এখন আমাদের শুধু System.setIn() ব্যবহার করতে হবেভেরিয়েবলের মান স্পষ্টভাবে সেট করার পদ্ধতি । out ছাড়া , আপনি মনে রাখবেন, ভেরিয়েবলের মান সরাসরি সেট করাও সম্ভব ছিল না: আমাদের setOut() পদ্ধতি ব্যবহার করতে হয়েছিল। আমরা System.in ভেরিয়েবলে আমাদের InputStream বরাদ্দ করার পরে , আমরা আমাদের উদ্দেশ্য অর্জন করেছি কিনা তা পরীক্ষা করতে চাই। আমাদের পুরানো বন্ধু বাফারডরিডার এখানে আমাদের সাহায্যে আসে। সাধারণত, এই কোডটি IntelliJ IDEA-তে কনসোলটি খুলবে এবং তারপরে কীবোর্ড থেকে আপনার প্রবেশ করা ডেটা পড়বে।
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = reader.readLine())!= null) {
System.out.println(str);
}
কিন্তু এখন আপনি যখন এটি চালাবেন, আপনি দেখতে পাবেন যে আমাদের স্ট্রিংটি কেবল কনসোলে প্রদর্শিত হয়েছে। কীবোর্ড থেকে কোন রিডিং নেই। আমরা তথ্য উৎস প্রতিস্থাপন. এটা আর কীবোর্ড নয়, আমাদের স্ট্রিং! এটা খুবই সহজ :) আজকের পাঠে, আমরা একটি নতুন ক্লাস জানতে পেরেছি এবং I/O এর সাথে কাজ করার জন্য একটি ছোট নতুন হ্যাক অন্বেষণ করেছি। এখন কোর্সে ফিরে আসার এবং কিছু কাজ সম্পূর্ণ করার সময় :) পরবর্তী পাঠে দেখা হবে!
GO TO FULL VERSION