Showing posts with label জাভা. Show all posts
Showing posts with label জাভা. Show all posts

Wednesday, March 22, 2017

জাভাতে কীভাবে ফাইল কপি করা যায়(File Copying in Java)

জাভাতে বিভিন্নভাবে ফাইল কপি করা যায়।

প্রথমে ইনপুট স্ট্রিম ব্যবহার করে ফাইল কপি করতে পারি।



copy() মেথডটিতে দুটি প্যারামিটার রয়েছে। প্রথমটিতে ফাইলের সোর্সটি স্ট্রিং আকারে দিতে হবে, অর্থাৎ যে ফাইলটি কপি করা হবে তার পাথ। দ্বিতীয়টি যেখানে ফাইলটি কপি করা হবে। এটি ডেস্টিনেশন ফাইল। এই ফাইলটি সিস্টেমে না থাকলে নতুন করে তৈরি হবে। আর যদি ফাইলটি আগে থেকেই তৈরি করা থাকে, তাহলে এর কন্টেন্ট রিপ্লেস হবে।

এতে প্রথমে একটি ইনপুট স্ট্রিম ব্যবহার করা হয়েছে যা দিয়ে ফাইল থেকে ডেটা পড়া হয়, এবং একটি আউটপুট স্ট্রিম ব্যবহার করা হয়েছে যা দিয়ে ডেস্টিনেশন ফাইলে রাইট করা হয়।

ডেটা রিপ্লেস না করতে চাইলে আউটপুট স্ট্রিমকে নিচের মতো তৈরি করা যেতে পারে-

OutputStream os = new FileOutputStream(destFile, true)

এই উদাহরণটি জাভার সকল ভার্সনে চলবে।

এছাড়াও জাভা এনআইও (Java NIO) ব্যবাহার করে আরও দ্রুত ফাইল কপি করা যায়।



তবে জাভা ৭ ও এর পরবর্তীতে আরও সংক্ষিপ্তভাবে কপি করার মেথড রয়েছে।



এতে শুধুমাত্র একটি মেথড দিয়েই ফাইল কপি করা যাচ্ছে -

Files.copy(src, dest); 


সবগুলোকে রান করতে হলে -



এই সম্পর্কে আরও বিস্তারিত জানতে হলে জাভা প্রোগ্রামিং বইটির অধ্যায় ৯ ও ১০ টি পড়া যেতে পারে।

বইটি পাওয়া যাবে : রকমারি ডট কম, ফোন: ১৬২৯৭:  https://goo.gl/FpfSvO

Monday, February 20, 2017

জাভা দিয়ে ওয়েব ক্রলার (Java Web Crawler Implementation)

ওয়েব ক্রলার মূলত একটি প্রোগ্রাম যা বিভিন্ন ওয়েব সাইট ব্রাউজ করে বিভিন্ন তথ্য বের করে। একে অনেক সময় স্পাইডার বা ইন্টারনেট বট ও বলা হয়। একটি ওয়েব ক্রলার তৈরি করা একটি ফান প্রজেক্ট হতে পারে।

জাভা দিয়ে এটি তৈরি করার সময় বেশ কতগুলো বিষয় অর্থাৎ ডিজাইন নিয়ে চিন্তা করা যায়। যেমন -
১. এটি সিঙ্গেল থ্রেডেড (Single threaded,) ও সিনক্রোনাস (synchronous) হতে পারে।
২. মাল্টি থ্রেডেড (multi threaded ) ও কনকারেন্ট (concurrent) হতে পারে।
৩. জাভা ইনপুট/আউটপুটের(I/O) জন্যে স্ট্রিম বেইজড বা নিউআইও(NIO) এর বাফার ও চ্যানেল বেইজড হতে পারে।

শুধুমাত্র ফান প্রজেক্ট হিসেবে করতে চাইলে প্রত্যেকটি কম্বিনেশনের জন্যে আলাদা আলাদা করে তৈরি করা যেতে পারে।

সিঙ্গেল থ্রেডেড ও সিনক্রোনাস ক্রলারের তৈরি করা সহজ। এটি তৈরি করতে হলে নিচের কাজগুলো করতে হবে -
১. প্রথমে একটি ওয়েব অ্যাড্রেস থেকে HTML পেইজ ডাউনলোড করতে হবে।
২. HTML পেইজকে পার্স(parse) করতে হবে।
৩. পার্স করারপর প্রয়োজনীয় তথ্যগুলো আলাদা করতে হবে।
৪. পেইজে আরও কোনো লিংক থাকলে সেগুলো আলাদা করতে হবে।
৫. সেই লিংক থেকে আবার ১ নং এর মতো পুরো প্রক্রিয়াটি শুরু করতে হবে।

এই রকম একটি উদাহরণ পাওয়া যাবে এই লিংকে : https://goo.gl/0EiQnC

তবে এর চেয়ে ভাল উপায় হতে পারে যদি মাল্টি থ্রেডেড ক্রলার তৈরি করতে পারি, যাতে অনেকগুলো থ্রেড একই সাথে পাশাপাশি কাজ করবে।

এইরকম একটি ক্রলার তৈরির চেষ্টা করেছিলাম বেশ কিছুদিন আগে। গিটহাবের এই লিংকে এর সোর্সকোড পাওয়া যাবে।

এটি রান করতে হলে আপনার মেশিনে যে যে টুলগুলো থাকবে হবে সেগুলো হলো -
১. গিট (Git)
২. গ্রাডল (Gradle)
৩. জাভা ৮

এটি একটি সংক্ষিপ্ত প্রজেক্ট যাতে ৪ টি ক্লাস রয়েছে এবং দুটি ইন্টারফেস রয়েছে।

মূল অংশ শুরু হবে নিচের ক্লাস থেকে -


এতে প্রথমে একটি বেইজ ইউআরএল দিতে হবে যে ওয়েব সাইট থেকে ক্রল শুরু করবে।

এরপরেই রয়েছে Crawler ক্লাস যেখানে থেকে নতুন থ্রেড তৈরি করা হয়। এই থ্রেড HTML পেইজকে ডাওনলোড করে পার্স করতে থাকে। এতে একটি PageProcessor ইন্টারফেইসের ইমপ্লিমেন্টেশন দিতে হয়, যা HTML পেইজটিকে প্রসেস করে। এখানে একাধিক প্রসেসর দেওয়া যেতে পারে। এই প্রজেক্টে HTML পেইজ থেকে লিংকগুলো আলাদা করে পেইজ টি ফাইলে সংরক্ষণ করার জন্যে SaveOnDiskProcessor ক্লাসটি ব্যবহার করা হয়েছে। এতে একটি ফাইলের পাথ দিতে হয়। আপনার প্রয়োজন অনুযায়ী এক বা একাধিক প্রসেসর তৈরি করতে পারেন। এখানে ফাইলে সংরক্ষণ করা হয়েছে, আপনার ডেটাবেইজে সংরক্ষণ করার প্রয়োজন হতে পারে।

সোর্সকোডটি পড়ে বোঝার চেষ্টা করুন। কোনো ফিডব্যাক বা উন্নতি করার উপায় থাকলে ক্লোন করে পুল রিকোয়েস্ট পাঠাতে পারেন।