স্ট্রিং (জাভা) এ রিসোর্স টেক্সট ফাইলটি পড়ার জন্য ব্যবহারগুলি [বন্ধ]


215

এমন কোনও ইউটিলিটি রয়েছে যা রিসোর্সে টেক্সট ফাইলটিকে স্ট্রিংয়ে পড়তে সহায়তা করে। আমি মনে করি এটি একটি জনপ্রিয় প্রয়োজনীয়তা, তবে গুগলিংয়ের পরে আমি কোনও উপযোগিতা পাইনি।


1
"রিসোর্সে টেক্সট ফাইল" বনাম "রিসোর্সে টেক্সট ফাইল" বলতে আপনার অর্থ কী তা দয়া করে ব্যাখ্যা করুন - আপনি কী অর্জন করতে চাইছেন তা বোঝা সহজ নয়।
মাদুর

এটি কেবল ক্লাসপাথের অধীনে একটি পাঠ্য ফাইল যা "ক্লাসপাথ *: মাইটেক্সট / পাঠ্য.টেক্সট"
লোক ফান

উত্তর:


301

হ্যাঁ, পেয়ারা এই উপলব্ধ Resourcesবর্গ। উদাহরণ স্বরূপ:

URL url = Resources.getResource("foo.txt");
String text = Resources.toString(url, StandardCharsets.UTF_8);

21
@ জোনস্কিট এটি দুর্দান্ত, তবে ওয়েব অ্যাপ্লিকেশনগুলির জন্য এটি সর্বোত্তম সমাধান নাও হতে পারে, বাস্তবায়ন getResourceব্যবহার করা হচ্ছে Resource.class.getClassLoaderতবে ওয়েব অ্যাপ্লিকেশনগুলিতে এটি "আপনার" শ্রেণীর লোডার নাও হতে পারে, তাই এটি প্রস্তাবিত (যেমন [1]) ব্যবহার করার জন্য Thread.currentThread().getContextClassLoader().getResourceAsStreamপরিবর্তে (রেফারেন্স [1]: স্ট্যাকওভারফ্লো.com / জিজ্ঞাসা / 676250/… )
ইরান মেডান

2
@ ইরানমেদান: হ্যাঁ, আপনি যদি প্রসঙ্গ শ্রেণিবদ্ধ করতে চান তবে আপনি এটি স্পষ্টভাবে ব্যবহার করতে চাইবেন।
জন স্কিটি

6
বিশেষ ক্ষেত্রে যখন আপনার শ্রেণীর পাশে সংস্থান থাকে, আপনি এমনটি করতে পারেন Resources.toString(MyClass.getResource("foo.txt"), Charsets.UTF_8)যা সঠিক বর্গ লোডার ব্যবহারের গ্যারান্টি দেয়।
বোগদান Calmac

2
com.google.common.io.Resources
সোনারকিউব

1
guavaবাস্তবায়ন পরিবর্তন করেছে। পেয়ারার জন্য 23 বাস্তবায়ন নিম্নলিখিত পছন্দ করে। ClassLoader loader = MoreObjects.firstNonNull( Thread.currentThread().getContextClassLoader(), Resources.class.getClassLoader());
xxy

170

আপনি পেয়ারার মতো কোনও অতিরিক্ত নির্ভরতা ছাড়াই এটি করতে পুরানো স্টুপিড স্ক্যানার ট্রিক অনেলিনার ব্যবহার করতে পারেন :

String text = new Scanner(AppropriateClass.class.getResourceAsStream("foo.txt"), "UTF-8").useDelimiter("\\A").next();

বন্ধুরা, আপনার যদি সত্যিই এটির প্রয়োজন না হয় তৃতীয় পক্ষের জিনিস ব্যবহার করবেন না। জেডিকে ইতিমধ্যে প্রচুর কার্যকারিতা রয়েছে।


41
তৃতীয় পক্ষ এড়ানো একটি যুক্তিসঙ্গত নীতি। দুর্ভাগ্যক্রমে মূল লাইব্রেরি বাস্তব জীবনের ব্যবহারের ক্ষেত্রে মডেলিংয়ের ক্ষেত্রে অ্যালার্জি বলে মনে হয়। জাভা 7 এর ফাইলগুলি দেখুন এবং আমাকে বলুন যে শ্রেণিপথের উত্স থেকে সমস্ত কিছু পড়া কেন সেখানে অন্তর্ভুক্ত করা হয়নি? বা কমপক্ষে একটি প্রমিত 'ফাইল সিস্টেম' ব্যবহার করে।
দিলুম রানাতুঙ্গা

3
এটি কি - বা এটি নয় - পাশাপাশি স্ট্রিমটি বন্ধ করা প্রয়োজনীয়? পেয়ারা অভ্যন্তরীণভাবে প্রবাহ বন্ধ করে দেয়।
কুমারী 47

আমার জন্য খুব সুন্দর কাজ! আমি তৃতীয় পক্ষের জিনিসটি সম্পর্কেও একমত: অনেক উত্তরের ক্ষেত্রে, ডিফল্ট প্রতিক্রিয়া সর্বদা কিছু তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে বলে মনে হয় - এটি অ্যাপাচি বা অন্য কারও পক্ষ থেকে।
তেরজে দহল

1
পরিবর্তন CartApplication.class.getResourceAsStreamকরার জন্য CartApplication.class.getClassLoader().getResourceAsStreamবর্তমান jar..like SRM / পরীক্ষা / সম্পদ সংস্থান লোড করতে
ক্রিস DaMour

5
আমি এটি ব্যবহার করার সময়, তৃতীয় পক্ষের প্যাকেজগুলি এড়িয়ে যাওয়ার বিষয়ে আমি সম্পূর্ণ একমত নই। জাভাতে, স্ট্রিং-এ সহজেই ফাইল পড়ার একমাত্র উপায় হ'ল স্ক্যানার ট্রিকটি অত্যন্ত দুঃখজনক। 3 য় পক্ষের লাইব ব্যবহারের বিকল্প হ'ল প্রত্যেকে কেবল নিজের নিজের মোড়ক তৈরি করবে। যদি এই ধরণের অপারেশনের জন্য আপনার প্রচুর প্রয়োজন হয় তবে IO এর জন্য পেয়ারা জিতবে। যেখানে আমি সম্মতি জানাব তা হল আপনার কোডটিতে কেবল যেখানে আপনি এটি করতে চান সেখানে যদি আপনার কেবল একটি জায়গা থাকে তবে আপনার কোনও তৃতীয় পক্ষের প্যাকেজ আমদানি করা উচিত নয়। ওভারকিল ইমো হবে।
কেনে সিজন

90

জাভা 7 এর জন্য:

new String(Files.readAllBytes(Paths.get(getClass().getResource("foo.txt").toURI())));

3
এটি কেন কাজ করে, অন্য বিকল্পগুলির চেয়ে কেন এটি ভাল এবং কোনও কার্য সম্পাদন / এনকোডিং বিবেচনার প্রয়োজন তা দয়া করে ব্যাখ্যা করুন।
ন্যানোফারাড

5
এটি জাভা 1.7 এ নিও 2। এটি জাভা দেশীয় প্রাপ্তি। এনকোডিংয়ের জন্য নতুন স্ট্রিং ব্যবহার করুন (বাইটস, স্ট্যান্ডার্ডচারেটস.ইউটিএফ_8)
কোভালস্কি দিমিত্রি

5
আমার ক্ষেত্রে আমার প্রয়োজন getClass().getClassLoader()তবে অন্যথায় দুর্দান্ত সমাধান!
এমমানুয়েল টাজারি

3
অ্যাপ্লিকেশনটি একটি পাত্রে প্যাকেজ হয়ে গেলে এটি কাজ করবে না।
ড্যানিয়েল বো

65

খাঁটি এবং সাধারণ, জার বান্ধব, জাভা 8+ সমাধান

আপনি জাভা 8 বা তার বেশি ব্যবহার করছেন তবে নীচের এই সাধারণ পদ্ধতিটি ঠিক করবে:

/**
 * Reads given resource file as a string.
 *
 * @param fileName path to the resource file
 * @return the file's contents
 * @throws IOException if read fails for any reason
 */
static String getResourceFileAsString(String fileName) throws IOException {
    ClassLoader classLoader = ClassLoader.getSystemClassLoader();
    try (InputStream is = classLoader.getResourceAsStream(fileName)) {
        if (is == null) return null;
        try (InputStreamReader isr = new InputStreamReader(is);
             BufferedReader reader = new BufferedReader(isr)) {
            return reader.lines().collect(Collectors.joining(System.lineSeparator()));
        }
    }
}

এবং এটি জার ফাইলগুলিতে সংস্থানগুলি নিয়েও কাজ করে

পাঠ্য এনকোডিং সম্পর্কে: InputStreamReaderআপনি যদি কোনও নির্দিষ্ট না করেন সে ক্ষেত্রে ডিফল্ট সিস্টেম চরসেট ব্যবহার করবে। ডিকোডিং সমস্যা এড়াতে আপনি নিজে এটি নির্দিষ্ট করতে চাইতে পারেন:

new InputStreamReader(isr, StandardCharsets.UTF_8);

অপ্রয়োজনীয় নির্ভরতা এড়িয়ে চলুন

সর্বদা বড়, ফ্যাট লাইব্রেরির উপর নির্ভর না করে পছন্দ করুন। আপনি যদি ইতিমধ্যে অন্যান্য কাজগুলির জন্য পেয়ারা বা অ্যাপাচি কমন্স আইও ব্যবহার না করেন তবে কেবলমাত্র একটি ফাইল থেকে পড়তে সক্ষম হতে আপনার প্রকল্পে এই লাইব্রেরিগুলি যুক্ত করার বিষয়টি কিছুটা খুব বেশি মনে হচ্ছে।

"সরল" পদ্ধতি? অস্ত্রোপচার

আমি বুঝতে পেরেছি যে খালি জাভা ভাল কাজ করে না যখন এই জাতীয় কাজগুলি করার মতো আসে। উদাহরণস্বরূপ, আমরা নোড.জেএস-এ কোনও ফাইল থেকে এইভাবে পড়ি:

const fs = require("fs");
const contents = fs.readFileSync("some-file.txt", "utf-8");

সহজ এবং পড়তে সহজ (যদিও লোকেরা এখনও যাইহোক অনেকগুলি নির্ভরতার উপর নির্ভর করতে পছন্দ করে, বেশিরভাগই অজ্ঞতার কারণে)। বা পাইথনে:

with open('some-file.txt', 'r') as f:
    content = f.read()

এটি দুঃখজনক হলেও জাভা মানগুলির পক্ষে এটি এখনও সহজ এবং আপনাকে যা করতে হবে তা হ'ল উপরের পদ্ধতিটি আপনার প্রকল্পে অনুলিপি করে ব্যবহার করতে হবে। এমনকি সেখানে কী চলছে তা বুঝতে আপনাকে জিজ্ঞাসাও করি না, কারণ এটি কারও পক্ষে সত্যিই গুরুত্বপূর্ণ নয়। এটি কেবল কাজ করে, সময়কাল :-)


4
@ জাকম্যাক দয়া করে আপনার মন্তব্যগুলি গঠনমূলক রাখার চেষ্টা করুন। আপনি যখন একজন পরিণত বিকাশকারী হিসাবে বড় হন, আপনি শিখেন যে কখনও কখনও আপনি "চাকাটি পুনর্নবীকরণ" করতে চান। উদাহরণস্বরূপ, আপনার বাইনারি কিছু প্রান্তিক আকারের নীচে রাখার প্রয়োজন হতে পারে। গ্রন্থাগারগুলি প্রায়শই আপনার অ্যাপ্লিকেশনটির আকার বাড়িয়ে তোলে of আপনি যা বলেছিলেন তার বিপরীতে কেউ তর্ক করতে পারে: "কোড লেখার দরকার নেই Y হ্যাঁ, প্রতিবার লাইব্রেরি আমদানি করুন"। আপনি কি কেবল আপনার লাইনের 3 লাইনের কোড সংরক্ষণ করতে লাইব্রেরি আমদানি করতে পছন্দ করবেন? আমি বাজি ধরছি যে লাইব্রেরি যুক্ত করা আপনার এলওসি এর চেয়ে আরও বাড়িয়ে দেবে। মূলটি হল ভারসাম্য।
লুসিও পাইভা

3
ঠিক আছে, সবাই মেঘের উপর স্টাফ চালাচ্ছে না। উদাহরণস্বরূপ জাভা চলমান সর্বত্র এম্বেড থাকা সিস্টেম রয়েছে। আপনি কেবল নিজের কোডে জেডিকে ব্যবহার করার পরামর্শটি গ্রহণ করতে যাচ্ছেন বলে নিজেকে উল্লেখ করার সাথে সাথে যে উত্তরগুলি সম্পূর্ণ বৈধ পদ্ধতির সরবরাহ করে সেগুলি সম্পর্কে সমালোচনা করার ক্ষেত্রে আমি আপনার বক্তব্যটি দেখতে পাচ্ছি না। যাইহোক, দয়া করে মতামত নিয়ে আলোচনা না করে উত্তরগুলি উন্নত করতে সহায়তা করার জন্য কঠোর মন্তব্য করার চেষ্টা করি to
লুসিও পাইভা

1
ভাল জেডিকে একমাত্র সমাধান। আমি কেবলমাত্র InputStreamভেরিয়েবলটি isকিনা nullতা যাচাই করতে চাই।
স্ক্রুতরী

2
খুশী হলাম। আমি এই ব্যবহার। আপনি স্ট্রিমগুলি / পাঠকদেরও বন্ধ করার বিষয়টি বিবেচনা করতে পারেন।
ডিম্প্লেক্স

1
@ রবার্টবেইন আমি চরসেট সতর্কতা সম্পর্কে তথ্য যুক্ত করতে উত্তরটি সম্পাদনা করেছি। এডাব্লুএসে ক্লাস লোডারটির সাথে কী কী ভুল হয়েছে তা যদি আমাকে খুঁজে পান তবে আমি এটির উত্তরটিতেও যুক্ত করতে পারি know ধন্যবাদ!
লুসিও পাইভা

57

স্ট্রিংয়ে ফাইল পড়ার জন্য পেয়ারাতে একটি "টসস্ট্রিং" পদ্ধতি রয়েছে:

import com.google.common.base.Charsets;
import com.google.common.io.Files;

String content = Files.toString(new File("/home/x1/text.log"), Charsets.UTF_8);

এই পদ্ধতির জন্য ফাইলটি ক্লাসপথে থাকা প্রয়োজন হয় না ( জন স্কিটির পূর্ববর্তী উত্তর হিসাবে)।


2
অথবা এটি যদি কোনও ইনপুট স্ট্রিম হয় তবে পেয়ারার জন্য এটিও একটি দুর্দান্ত উপায় রয়েছেString stringFromStream = CharStreams.toString(new InputStreamReader(resourceAsStream, "UTF-8"));
ইরান মেডান

1
এটি পেয়ারা 24.1
অ্যান্ড্রে

47

yegor256 অ্যাপাচি কমন্স আইও ব্যবহার করে একটি দুর্দান্ত সমাধান খুঁজে পেয়েছে :

import org.apache.commons.io.IOUtils;

String text = IOUtils.toString(this.getClass().getResourceAsStream("foo.xml"),
                               "UTF-8");

আমি এই ক্ষেত্রে "" পছন্দ করি না এটি অনুপলব্ধ
ব্যবহারকারী 833970

11
শুধু কম্প্যাক্ট হিসাবে, কিন্তু ইনপুট স্ট্রিম যথাযথ বন্ধের সঙ্গে IOUtils.toString(this.getClass().getResource("foo.xml"), "UTF-8")
বোগদান Calmac

1
যদি এই সমাধানটি কাজ করে না, getClassLoader()তবে পদ্ধতি শৃঙ্খলে যুক্ত করার চেষ্টা করুন : String text = IOUtils.toString( getClass().getClassLoader().getResourceAsStream("foo.xml"), StandardCharsets.UTF_8);
আব্দুল

39

অ্যাপাচি-কমন্স-আইওর একটি ইউটিলিটির নাম রয়েছে FileUtils:

URL url = Resources.getResource("myFile.txt");
File myFile = new File(url.toURI());

String content = FileUtils.readFileToString(myFile, "UTF-8");  // or any other encoding

1
কেন একটি এনকোডিং নির্দিষ্ট করতে হবে, আমি তা পাই না। আমি যদি ফাইলটি পড়ি, তবে আমি কেবল এটিতে যা চাই তা চাই, এটি আমার সম্পাদকের মতো কী এনকোডিংয়ের মতো তা নির্ধারণ করা উচিত। আমি নোটপ্যাড বা ++ এ খুললে এটি কী এনকোডিং ব্যবহার করা উচিত তা আমি বলি না। আমি এই পদ্ধতিটি ব্যবহার করছি এবং তারপরে লেখার পরে স্ট্রিংটোফিল করুন ... তবে বিষয়বস্তু আলাদা। ক্লোন করা ফাইলটিতে আমি অদ্ভুত টোকেন পেয়েছি .. কেন আমাকে একটি এনকোডিং নির্দিষ্ট করতে হবে তা আমি পাই না।
মিমি

11
@ হামিদন, সঠিক এনকোডিং নির্বাচন করা খুব জটিল অ্যালগরিদম। এটি প্রায়শই পাঠ্য সম্পাদকে প্রয়োগ করা হয় তবে তারা কখনও কখনও সঠিক এনকোডিং সনাক্ত করতে ব্যর্থ হয়। আমার ফাইলটি পড়ার জন্য এ জাতীয় জটিল অ্যালগরিদম এম্বেড করার জন্য কোনও ফাইল রিডিং এপিআই আশা করব না।
ভিনসেন্ট রবার্ট

1
@ সেক্রেট সার্ভিস এছাড়াও, সেই অ্যালগরিদমগুলি অপারেটিং সিস্টেমের ভাষা, স্থানীয় এবং অন্যান্য আঞ্চলিক সেটিংসের মতো তথ্যের ব্যবহার করে যার অর্থ একটি এনকোডিং নির্দিষ্ট না করে কোনও ফাইল পড়া আপনার সেটআপে কাজ করতে পারে তবে অন্য কারও পক্ষে নয়।
ফিউমুরমেল

অ্যাপাচি ফাইলUtilsরিডলাইনস (ফাইল) এবং কপিরাইটটিওফাইলে (URL, টেম্পাইল)।
যশ

2
আমি মনে করি না যে যদি কোনও জারের ভিতরে সংস্থানটি পাওয়া যায় তবে এটি কাজ করবে। তাহলে এটি কোনও ফাইল হবে না।
ভিল ওইকারিনেন

16

আমার প্রায়শই এই সমস্যা হত। ছোট প্রকল্পগুলির উপর নির্ভরতা এড়াতে আমি প্রায়শই একটি ছোট ইউটিলিটি ফাংশন লিখি যখন আমার আইও বা এ জাতীয় কমোন প্রয়োজন হবে না। স্ট্রিং বাফারে ফাইলটির বিষয়বস্তু লোড করার কোড এখানে রয়েছে:

StringBuffer sb = new StringBuffer();

BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("path/to/textfile.txt"), "UTF-8"));
for (int c = br.read(); c != -1; c = br.read()) sb.append((char)c);

System.out.println(sb.toString());   

সেক্ষেত্রে এনকোডিং নির্দিষ্ট করা গুরুত্বপূর্ণ, কারণ আপনি নিজের ফাইলটি ইউটিএফ -8 এ সম্পাদনা করতে পারেন, এবং তারপরে এটি একটি জারে রেখেছিলেন এবং যে কম্পিউটারটি ফাইলটি খোলে তার সিপি -1211 এর স্থানীয় ফাইল এনকোডিং হিসাবে থাকতে পারে (উদাহরণস্বরূপ) ; সুতরাং এই ক্ষেত্রে আপনি কখনই লক্ষ্যযুক্ত এনকোডিং জানেন না, সুতরাং সুস্পষ্ট এনকোডিং তথ্য অত্যন্ত গুরুত্বপূর্ণ। এছাড়াও চরের দ্বারা ফাইলের চরটি পড়ার লুপটি অকার্যকর বলে মনে হয় তবে এটি একটি বাফার্ডারিডারে ব্যবহার করা হয়, এবং এটি আসলে বেশ দ্রুত।


15

আপনি নিম্নলিখিত কোড ফর্ম জাভা ব্যবহার করতে পারেন

new String(Files.readAllBytes(Paths.get(getClass().getResource("example.txt").toURI())));

"ফাইল" এবং "পাথ" শ্রেণিতে টানতে কী আমদানির বিবৃতি প্রয়োজন?
স্টিভ শেহেরার

1
দু'টিই JDK 7+ থেকে উপলব্ধ java.nio.file প্যাকেজের অংশ
রঘু কে নায়ার

একটি জার ফাইলের সাথে কাজ করে না।
Displee

4

আপনি যদি আপনার প্রকল্পের সিসিআর / মেইন / রিসোর্সে ফাইল টেস্টকেস / foo.json ফাইলের মতো কোনও প্রকল্পের সংস্থান থেকে আপনার স্ট্রিং পেতে চান তবে এটি করুন:

String myString= 
 new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("testcase/foo.json").toURI())));

নোট করুন যে getClassLoader () পদ্ধতিটি অন্য কয়েকটি উদাহরণে অনুপস্থিত।


2

অ্যাপাচি কমনের ফাইল ইউটিল ব্যবহার করুন। এটিতে একটি পদ্ধতি রয়েছে রিডফিলিটোস্ট্রিং


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

2

আমি নিম্নলিখিতগুলি থেকে উত্স ফাইলগুলি পড়ার জন্য ব্যবহার করছি classpath:

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.Scanner;

public class ResourceUtilities
{
    public static String resourceToString(String filePath) throws IOException, URISyntaxException
    {
        try (InputStream inputStream = ResourceUtilities.class.getClassLoader().getResourceAsStream(filePath))
        {
            return inputStreamToString(inputStream);
        }
    }

    private static String inputStreamToString(InputStream inputStream)
    {
        try (Scanner scanner = new Scanner(inputStream).useDelimiter("\\A"))
        {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
}

কোনও তৃতীয় পক্ষের নির্ভরতা প্রয়োজন।


1

স্থির আমদানির সেট সহ, পেয়ারা সমাধান খুব কমপ্যাক্ট ওয়ান-লাইনার হতে পারে:

toString(getResource("foo.txt"), UTF_8);

নিম্নলিখিত আমদানি প্রয়োজন:

import static com.google.common.io.Resources.getResource
import static com.google.common.io.Resources.toString
import static java.nio.charset.StandardCharsets.UTF_8

1
package test;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            String fileContent = getFileFromResources("resourcesFile.txt");
            System.out.println(fileContent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //USE THIS FUNCTION TO READ CONTENT OF A FILE, IT MUST EXIST IN "RESOURCES" FOLDER
    public static String getFileFromResources(String fileName) throws Exception {
        ClassLoader classLoader = Main.class.getClassLoader();
        InputStream stream = classLoader.getResourceAsStream(fileName);
        String text = null;
        try (Scanner scanner = new Scanner(stream, StandardCharsets.UTF_8.name())) {
            text = scanner.useDelimiter("\\A").next();
        }
        return text;
    }
}

1

কমপক্ষে অ্যাপাচি কমন্স-আইও 2.5 হিসাবে, আইউইটিস.ল্ট স্ট্রিং () পদ্ধতিটি একটি ইউআরআই যুক্তিকে সমর্থন করে এবং ক্লাসপাথের জারের ভিতরে থাকা ফাইলগুলির বিষয়বস্তু ফেরত দেয়:

IOUtils.toString(SomeClass.class.getResource(...).toURI(), ...)

1

আমি স্টুপিড স্ক্যানার ট্রিকের সাথে আকসিকি এর উত্তরটি পছন্দ করি। বাহ্যিক নির্ভরতা ছাড়া জাভা 8 এ কাজ করে এমনটি আমি দেখতে সবচেয়ে সহজ (এবং বাস্তবে জাভা 5 তে ফিরে আসা)। আপনি জাভা 9 বা ততোধিক ব্যবহার করতে পারলে এখানে আরও সহজ উত্তর InputStream.readAllBytes()দেওয়া হয়েছে (যেহেতু জাভা 9 এ যুক্ত হয়েছিল):

String text = new String(AppropriateClass.class.getResourceAsStream("foo.txt").readAllBytes());

0

Files.readLines()আপনি যদি List<String>লাইন-বাই-লাইন হিসাবে কোনও ফেরতের মান চান তবে পেয়ারাতেও রয়েছে :

List<String> lines = Files.readLines(new File("/file/path/input.txt"), Charsets.UTF_8);

একটি পাঠ্য ফাইল থেকে পেতে 3 উপায় ( বনাম গ্যাভা এর বনাম গুয়ারা এর ) তুলনা করতে দয়া করে এখানে দেখুনBufferedReaderFilesResourcesString


চরসেট ক্লাস কি? নেটিভ নয়
e-info128

@ e-info128 Charsetsএছাড়াও পেয়ারাতে রয়েছে। এটি দেখুন: google.github.io/guava/reLives/23.0/api/docs
ফিলিপজ্কিম

0

এখানে আমার পদ্ধতির ভাল কাজ করে

public String getFileContent(String fileName) {
    String filePath = "myFolder/" + fileName+ ".json";
    try(InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)) {
        return IOUtils.toString(stream, "UTF-8");
    } catch (IOException e) {
        // Please print your Exception
    }
}

2
আইওউটিলগুলি কোথা থেকে আসে? উত্সটি পরিষ্কারভাবে উল্লেখ করা উচিত।
এহ্যাক্যাটল

0

আমি এখানে সরল উত্স () পদ্ধতিগুলি লিখেছি , এটি একটি সাধারণ অনুরোধে করতে সক্ষম হতে। এটি পেয়ারা লাইব্রেরির উপর নির্ভর করে তবে আমি জেডকে-কেবল অন্যান্য উত্তরগুলিতে প্রস্তাবিত পদ্ধতিগুলি পছন্দ করি এবং আমার মনে হয় আমি এই উপায়গুলি পরিবর্তন করব।


0

আপনি যদি পেয়ারা অন্তর্ভুক্ত করেন তবে আপনি এটি ব্যবহার করতে পারেন:

String fileContent = Files.asCharSource(new File(filename), Charset.forName("UTF-8")).read();

(অন্যান্য সমাধানে পেয়ারা সম্পর্কিত অন্যান্য পদ্ধতির কথা উল্লেখ করা হলেও সেগুলি অবনমিত করা হয়েছে)


0

নিম্নলিখিত কোডগুলি আমার জন্য কাজ করে:

compile group: 'commons-io', name: 'commons-io', version: '2.6'

@Value("classpath:mockResponse.json")
private Resource mockResponse;

String mockContent = FileUtils.readFileToString(mockResponse.getFile(), "UTF-8");

0

জাভা 11 এর ব্যবহার করে এখানে একটি সমাধান দেওয়া হয়েছে Files.readString:

public class Utils {
    public static String readResource(String name) throws URISyntaxException, IOException {
        var uri = Utils.class.getResource("/" + name).toURI();
        var path = Paths.get(uri);
        return Files.readString(path);
    }
}

0

আমি এটির মতো কোনও নির্ভরতা স্থিতিশীল পদ্ধতি তৈরি করেছি:

import java.nio.file.Files;
import java.nio.file.Paths;

public class ResourceReader {
    public  static String asString(String resourceFIleName) {
        try  {
            return new String(Files.readAllBytes(Paths.get(new CheatClassLoaderDummyClass().getClass().getClassLoader().getResource(resourceFIleName).toURI())));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
class CheatClassLoaderDummyClass{//cheat class loader - for sql file loading
}

0

আমি অ্যাপাচি কমন্সগুলি এই ধরণের স্টাফের জন্য ব্যবহার করি এবং পরীক্ষার সময় এই সঠিক ব্যবহারের কেস (ক্লাসপাথ থেকে ফাইলগুলি পড়ার) ব্যবহার করে বিশেষত /src/test/resourcesইউনিট / ইন্টিগ্রেশন পরীক্ষার অংশ হিসাবে জেএসএন ফাইলগুলি পড়ার জন্য । যেমন

public class FileUtils {

    public static String getResource(String classpathLocation) {
        try {
            String message = IOUtils.toString(FileUtils.class.getResourceAsStream(classpathLocation),
                    Charset.defaultCharset());
            return message;
        }
        catch (IOException e) {
            throw new RuntimeException("Could not read file [ " + classpathLocation + " ] from classpath", e);
        }
    }

}

পরীক্ষার উদ্দেশ্যে, এটি ধরা IOExceptionএবং একটি নিক্ষেপ করা ভাল হতে পারে RuntimeException- আপনার পরীক্ষার ক্লাসটি উদাহরণস্বরূপ দেখতে পারে

    @Test
    public void shouldDoSomething () {
        String json = FileUtils.getResource("/json/input.json");

        // Use json as part of test ...
    }

-2
public static byte[] readResoureStream(String resourcePath) throws IOException {
    ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
    InputStream in = CreateBffFile.class.getResourceAsStream(resourcePath);

    //Create buffer
    byte[] buffer = new byte[4096];
    for (;;) {
        int nread = in.read(buffer);
        if (nread <= 0) {
            break;
        }
        byteArray.write(buffer, 0, nread);
    }
    return byteArray.toByteArray();
}

Charset charset = StandardCharsets.UTF_8;
String content = new   String(FileReader.readResoureStream("/resource/...*.txt"), charset);
String lines[] = content.split("\\n");

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