জাভাতে লুপ ব্যবহার না করে সম্পূর্ণ ফাইলটি পড়ুন


103

সম্ভাব্য নকল:
জাভায় একটি স্ট্রিং পুরো টেক্সট ফাইলের সামগ্রী থেকে জাভা স্ট্রিং কীভাবে তৈরি
করা যায়

আমি ফাইলআরডার ব্যবহার করে কোনও ফাইলের বিষয়বস্তু পড়ার চেষ্টা করছি। তবে আমি লাইনে এক লাইন না পড়ে ফাইলটি পড়তে চাই। লুপ ছাড়া পুরো ফাইলটি পড়া কি সম্ভব? আমি নিম্নলিখিত কোড ব্যবহার করছি

 try
 {
     File ff=new File("abc.txt");
     FileReader fr=new FileReader(ff);

     String s;
     while(br.read()!=-1)
     {
          s=br.readLine();
     }
 }

 catch(Exception ex)
 {
     ex.printStackTrace();
 }

এই কোডটি শুরু করার সাথে সংকলন করবে না।
আর্য পোরতাবাটাবাই

এটির জন্য একটি লাইন জাভা 11 সমাধান রয়েছে: স্ট্যাকওভারফ্লো.com
হেন্ডরিক

উত্তর:


129

ফাইলটি ছোট হলে আপনি পুরো ডেটা একবারে পড়তে পারেন:

File file = new File("a.txt");
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();

String str = new String(data, "UTF-8");

4
ইনপুটস্ট্রিমের অ্যান্ড্রয়েড সম্পদের জন্য কোনও কাজ করে না (কোনও দৈর্ঘ্য নেই)
আকৌপপি

10
"ছোট" কত ছোট?
রূপালী

8
@ সিলভার ফাইলের সম্পূর্ণ সামগ্রী মেমরিতে সংরক্ষণ করা হবে। সুতরাং, 5 জিবি ফাইলের মতো এড়িয়ে চলুন :-)
থাইবাট

2
দ্রষ্টব্য: অন্তর্ভুক্ত file.length()ফাইলগুলির জন্য 0 ফিরিয়ে দিতে পারে /proc। এবং এই ক্ষেত্রে এই স্নিপেট একটি খালি স্ট্রিং ফিরে আসবে।
মাইগড

1
এছাড়াও readপুরো বাফার পূরণ করতে পারে না। এটি বেশিরভাগ জেআরই-র সাথে অনুশীলনে কাজ করতে পারে তবে এপিআই-তে কোনও গ্যারান্টি নেই।
ড্যানিয়েল লুবারভ

179

জাভা 7 একটি লাইন সমাধান

List<String> lines = Files.readAllLines(Paths.get("file"), StandardCharsets.UTF_8);

অথবা

 String text = new String(Files.readAllBytes(Paths.get("file")), StandardCharsets.UTF_8);

1
অ্যান্ড্রয়েডে ফাইলগুলি খুঁজে পাওয়া যায় না।
আকৌপ্পি

23
সমস্ত জাভা উত্তর অ্যান্ড্রয়েডের জন্য উপযুক্ত হতে হবে না, @ কাকাপ্পি! কেবলমাত্র এমন একটি সমাধান সন্ধান করুন যা অ্যান্ড্রয়েড অন্য উত্তর থেকে সমর্থন করে!
আইজাক উডস

String text = Files.readString(Paths.get("file"));এমনকি আরও খাটো, ধরে নিলে আপনি কোনও ইউটিএফ -8 স্ট্রিং আউটপুট চান।
ইগটারিয়ান নাইট

এবং যদি আপনার কাছে ইতিমধ্যে ফাইল অবজেক্ট থাকে তবে আপনি file.toPath()ভিতরে এটি করতে পারেনreadAllBytes
কার্তিক চুগ

অ্যান্ড্রয়েডের জন্য গুরুত্বপূর্ণ: Call requires API level 26: java.nio.file.Files#readAllBytes- একই জিনিস readString
নেফ

33

আপনি যদি JDK5 বা ততোধিক উচ্চতর ব্যবহার করে থাকেন তবে আপনি স্ক্যানার ব্যবহার করে দেখতে পারেন ।

Scanner scan = new Scanner(file);  
scan.useDelimiter("\\Z");  
String content = scan.next(); 

অথবা আপনি পেয়ারাও ব্যবহার করতে পারেন

String data = Files.toString(new File("path.txt"), Charsets.UTF8);

4
নোট করুন যে স্ক্যানারটি ব্যবহারের পরে বন্ধ করা উচিত।
ব্যারি এনএল

String data = Files.toString(new File("path.txt"), Charsets.UTF_8);। শুধু একটি ছোট টাইপ। :-)
পিসারুক

1
এই কোডটি Scannerকেবল ফাইল থেকে প্রথম 1024 বাইট পড়ে read উত্স কোড দেখুন। এটি বাফারটি পড়ে এবং এই পুনর্নির্মাণের সাথে এটি পরীক্ষা করে। এটি সর্বদা বৈধ - তারপরে এটি সমস্ত বাফার সামগ্রী ফিরে আসে। ডিফল্টরূপে বাফারের আকার হয় 1024 বাইট।
এনাইবি

2
এটি বিএডি পদ্ধতির। সঠিক সমাধান (জাভা 1.7 এবং উচ্চতর জন্য) হয় Files.readAllLines()। উত্তরাধিকারের জেআরই এর FileInputStream.read()জন্য সম্ভবত সবচেয়ে ভাল। আমি নিশ্চিত নই যে এটি সমস্ত প্ল্যাটফর্মের কাছে পোর্টেবল (যেমন Ctl-Z সর্বত্র স্বীকৃত), এবং এটি করা খুব সহজ নয় Scanner.close()
পলস্ম 4

33

আপনি যদি জাভা 5/6 ব্যবহার করে থাকেন তবে আপনি স্ট্রিং টু স্ট্রিংয়ের জন্য অ্যাপাচি কমন্স আইও ব্যবহার করতে পারেন । ক্লাসটি org.apache.commons.io.FileUtilsফাইল পড়ার জন্য বেশ কয়েকটি পদ্ধতি সংযুক্ত করে।

যেমন পদ্ধতিটি ব্যবহার করে FileUtils#readFileToString:

File file = new File("abc.txt");
String content = FileUtils.readFileToString(file);

1
এটি সম্ভবত তৃতীয় পক্ষের lib ব্যবহার করে সবচেয়ে সহজ সমাধান।
রৌপ্য

3
লেখার জন্য ন্যূনতম কোড; প্রকল্পে যুক্ত আরও অনেক গ্রন্থাগার।
করে_ডন্ট_বুলি_মে_স_ও_লর্ডস

2
ফাইলUtils টাইপ থেকে ফাইলটিস্ট্রিং (ফাইল) পড়ার পদ্ধতিটি অবচয় করা হয়েছে
জাভাশেরিফ

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