स्ट्रिंग (Java) [बंद] के लिए संसाधन पाठ फ़ाइल पढ़ने के लिए उपयोग


215

क्या कोई उपयोगिता है जो संसाधन में एक पाठ फ़ाइल को स्ट्रिंग में पढ़ने में मदद करती है। मुझे लगता है कि यह एक लोकप्रिय आवश्यकता है, लेकिन मुझे Googling के बाद कोई उपयोगिता नहीं मिली।


1
कृपया स्पष्ट करें कि आपके पास "संसाधन पाठ फ़ाइल" बनाम "संसाधन में पाठ फ़ाइल" का क्या अर्थ है - यह समझना आसान नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं।
चटाई

यह क्लासपाथ के नीचे एक पाठ फ़ाइल है जैसे "क्लासपैथ *: मायटेक्स्ट / टेक्स्ट.टैक्स"
लोक फान

जवाबों:


301

हां, अमरूद इसे Resourcesकक्षा में प्रदान करता है । उदाहरण के लिए:

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

21
@JonSkeet यह बहुत अच्छा है, हालांकि वेब अनुप्रयोगों के लिए यह सबसे अच्छा समाधान नहीं हो सकता है, कार्यान्वयन का getResourceउपयोग कर रहा है, Resource.class.getClassLoaderलेकिन वेब अनुप्रयोगों में, यह "आपके" वर्ग लोडर नहीं हो सकता है, इसलिए इसका उपयोग करने की सिफारिश की जाती है (जैसे [1] में) Thread.currentThread().getContextClassLoader().getResourceAsStreamइसके बजाय (संदर्भ [1]: stackoverflow.com/questions/676250/… )
एरन मेडन

2
@EranMedan: हाँ, यदि आप संदर्भ क्लास लोडर चाहते हैं तो आप इसे स्पष्ट रूप से उपयोग करना चाहेंगे।
जॉन स्कीट

6
विशेष स्थिति में जब संसाधन आपकी कक्षा के बगल में है, तो आप वह कर सकते हैं Resources.toString(MyClass.getResource("foo.txt"), Charsets.UTF_8)जो सही वर्ग लोडर के उपयोग की गारंटी देता है।
बोगदान कैलमैक

2
com.google.common.io.Resourcesको सोनारक्यूब के अनुसार अस्थिर माना जाता है
घिल्टरस

1
guavaकार्यान्वयन को बदल दिया है। अमरूद 23 के लिए कार्यान्वयन निम्नलिखित पसंद करता है। ClassLoader loader = MoreObjects.firstNonNull( Thread.currentThread().getContextClassLoader(), Resources.class.getClassLoader());
xxy

170

आप पुराने स्टूपिड स्कैनर चाल oneliner का उपयोग कर सकते हैं कि अमरूद की तरह किसी भी अतिरिक्त निर्भरता के बिना:

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

दोस्तों, जब तक आपको वास्तव में आवश्यकता न हो, तब तक 3 पार्टी सामान का उपयोग न करें। JDK में पहले से ही बहुत अधिक कार्यक्षमता है।


41
तृतीय पक्ष से बचना एक उचित सिद्धांत है। दुर्भाग्य से कोर लाइब्रेरी को वास्तविक जीवन में उपयोग के मामलों की मॉडलिंग से एलर्जी है। जावा 7 की फाइलों को देखें, और मुझे बताएं कि क्लासपैथ संसाधन से सब कुछ पढ़ना वहां क्यों शामिल नहीं था? या कम से कम एक मानकीकृत 'फाइलसिस्टम' का उपयोग करते हुए।
दिलुम रणतुंगा

3
यह है - या यह धारा के रूप में अच्छी तरह से बंद करने के लिए आवश्यक नहीं है? अमरूद आंतरिक रूप से धारा को बंद कर देता है।
virgo47

मेरे लिए भी खूबसूरती से काम किया! मैं तीसरे पक्ष की बात के बारे में भी सहमत हूं: कई उत्तरों में, डिफ़ॉल्ट प्रतिक्रिया हमेशा किसी तीसरे पक्ष के पुस्तकालय का उपयोग करने के लिए प्रतीत होती है - यह अपाचे या किसी और से हो।
तेरह डाह्ल

1
वर्तमान जार में संसाधनों को लोड CartApplication.class.getResourceAsStreamकरने के CartApplication.class.getClassLoader().getResourceAsStreamलिए परिवर्तन..जैसे srm / परीक्षण / संसाधन
क्रिस DaMour

5
जबकि मैंने इसका उपयोग किया है, मैं तीसरे पक्ष के पैकेज से बचने पर पूरी तरह असहमत हूं। तथ्य यह है कि जावा में, आसानी से एक फ़ाइल को स्ट्रिंग में पढ़ने का एकमात्र तरीका स्कैनर चाल के साथ बहुत दुख की बात है। एक 3 पार्टी का उपयोग करने का विकल्प यह है कि हर कोई बस अपने स्वयं के रैपर बनाएगा। यदि आप इस तरह के ऑपरेशन के लिए बहुत सारी जरूरतें रखते हैं तो IO के लिए अमरूद जीतता है। जहाँ मैं सहमत हूँ कि आप एक 3 पार्टी पैकेज आयात नहीं करना चाहिए यदि आप अपने कोड में केवल एक जगह है जहाँ आप यह करना चाहते हैं। यह imoill overkill होगा।
केनी कैसन

90

जावा 7 के लिए:

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

3
कृपया बताएं कि यह क्यों काम करता है, क्यों यह अन्य विकल्पों की तुलना में बेहतर है, और किसी भी प्रदर्शन / एन्कोडिंग विचारों की आवश्यकता है।
नानोफारड

5
यह java 1.7 में nio 2 है। यह जावा का मूल भ्रूण है। एन्कोडिंग उपयोग के लिए नई स्ट्रिंग (बाइट्स, StandardCharsets.UTF_8)
कोवाल्स्की दिमित्री

5
मेरे मामले में मुझे जरूरत थी getClass().getClassLoader()लेकिन अन्यथा महान समाधान!
इमैनुएल टौजरी 20

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);

अनावश्यक निर्भरता से बचें

हमेशा बड़े, वसा पुस्तकालयों के आधार पर नहीं पसंद करते हैं। जब तक आप पहले से ही अन्य कार्यों के लिए अमरूद या अपाचे कॉमन्स IO का उपयोग नहीं कर रहे हैं, उन पुस्तकालयों को अपनी परियोजना में जोड़ना बस एक फ़ाइल से पढ़ने में सक्षम होने के लिए बहुत अधिक लगता है।

"सरल" विधि? तुम अवश्य ही मेरे साथ मज़ाक कर रहे होगे

मैं समझता हूं कि शुद्ध जावा एक अच्छा काम नहीं करता है जब इस तरह के सरल कार्य करने की बात आती है। उदाहरण के लिए, यह है कि हमने Node.js में एक फ़ाइल से कैसे पढ़ा है:

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
@zakmck कृपया अपनी टिप्पणियों को रचनात्मक रखने का प्रयास करें। जैसा कि आप एक परिपक्व डेवलपर के रूप में बड़े होते हैं, आप सीखते हैं कि कभी-कभी आप "पहिया को सुदृढ़ करना" चाहते हैं। उदाहरण के लिए, आपको अपने बाइनरी को थ्रेशोल्ड आकार से नीचे रखने की आवश्यकता हो सकती है। पुस्तकालय अक्सर परिमाण के आदेशों द्वारा आपके आवेदन का आकार बढ़ाते हैं। आप जो कुछ भी कह सकते हैं उसके ठीक विपरीत तर्क दे सकते हैं: "कोड लिखने की कोई आवश्यकता नहीं है। हाँ, चलो हर बार पुस्तकालय आयात करें"। क्या आप वास्तव में कोड की 3 पंक्तियों को सहेजने के लिए लाइब्रेरी का आयात करना पसंद करेंगे? मैं शर्त लगाता हूं कि पुस्तकालय को जोड़ने से आपका एलओसी बढ़ेगा। कुंजी संतुलन है।
लुसियो पाइवा

3
खैर, हर एक बादल पर सामान नहीं चला रहा है। उदाहरण के लिए, जावा चलाने वाले हर जगह एम्बेडेड सिस्टम हैं। मैं केवल उन उत्तरों की आलोचना करने में आपकी बात नहीं देखता, जो पूरी तरह से मान्य दृष्टिकोण प्रदान करते हैं, यह देखते हुए कि आप खुद का उल्लेख करते हैं कि आप अपने कोड में सीधे जेडीके का उपयोग करने के सुझाव को स्वीकार करने जा रहे हैं। वैसे भी, कृपया उत्तरों को बेहतर बनाने में मदद करने के लिए टिप्पणियों को सख्ती से रखने की कोशिश करें, न कि राय पर चर्चा करने के लिए।
लुसियो पाइवा

1
अच्छा JDK- केवल समाधान। मैं केवल जाँच InputStreamजोड़ूंगा isकि क्या चर है nullया नहीं।
स्क्रूटरी

2
अच्छा लगा। मैंने इसका इस्तेमाल किया। आप धाराओं / पाठकों को बंद करने पर भी विचार कर सकते हैं।
डिंपलक्स

1
@RobertBain मैंने charset चेतावनी के बारे में जानकारी जोड़ने के लिए उत्तर संपादित किया। मुझे पता है कि क्या आपको पता है कि एडब्ल्यूएस में क्लास लोडर के साथ क्या गलत हुआ है, तो मैं इसे उत्तर में भी जोड़ सकता हूं। धन्यवाद!
लुसियो पाइवा

57

अमरूद में एक स्ट्रिंग में एक फ़ाइल पढ़ने के लिए एक "toString" विधि है:

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
यह अमरूद २४.१
एंड्री

47

yegor256 ने Apache Commons IO का उपयोग करके एक अच्छा समाधान पाया है :

import org.apache.commons.io.IOUtils;

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

मैं इस मामले में "" पसंद करता हूं यह अनुपलब्ध है
user833970

11
बस कॉम्पैक्ट के रूप में, लेकिन इनपुट स्ट्रीम के उचित समापन के साथ IOUtils.toString(this.getClass().getResource("foo.xml"), "UTF-8"):।
बोगडान कैलमैक

1
यदि यह समाधान काम नहीं करता है, getClassLoader()तो विधि श्रृंखला में जोड़ने का प्रयास करें : String text = IOUtils.toString( getClass().getClassLoader().getResourceAsStream("foo.xml"), StandardCharsets.UTF_8);
अब्दुल

39

Apache-commons-io का एक उपयोगिता नाम है 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
एन्कोडिंग को क्यों निर्दिष्ट करना है, मुझे वह नहीं मिलता है। यदि मैं फ़ाइल पढ़ता हूं, तो मैं चाहता हूं कि इसमें क्या है, यह पता लगाना चाहिए कि यह मेरे संपादक की तरह एन्कोडिंग क्या है। जब मैं नोटपैड या ++ में खोलता हूं, तो मैं यह नहीं बताता कि इसे किस एन्कोडिंग का उपयोग करना चाहिए। मैं इस पद्धति का उपयोग कर रहा हूं और फिर बाद में लिखता हूं StringToFile ... लेकिन सामग्री अलग है। मुझे क्लोन फाइल में अजीब तरह के टोकन मिलते हैं .. मुझे नहीं लगता कि मुझे एन्कोडिंग निर्दिष्ट करना चाहिए।
mmm

11
@ हमीदन, सही एन्कोडिंग चुनना एक बहुत ही जटिल एल्गोरिथ्म है। इसे अक्सर पाठ संपादक में लागू किया जाता है लेकिन वे कभी-कभी सही एन्कोडिंग का पता लगाने में विफल होते हैं। मैं अपनी फ़ाइल पढ़ने के लिए इस तरह के जटिल एल्गोरिथ्म को एम्बेड करने के लिए एपीआई पढ़ने वाली फ़ाइल की उम्मीद नहीं करूंगा।
विंसेंट रॉबर्ट

1
@SecretService इसके अलावा, उन एल्गोरिदम ऑपरेटिंग सिस्टम की भाषा, लोकेल और अन्य क्षेत्रीय सेटिंग्स जैसी जानकारी का उपयोग करते हैं, जिसका अर्थ है कि एन्कोडिंग निर्दिष्ट किए बिना किसी फ़ाइल को पढ़ना आपके सेटअप पर काम कर सकता है, लेकिन किसी और पर नहीं।
फुएरमुरमेल

अपाचे FileUtilsreadLines (फाइल) और copyURLToFile (URL, tempFile)।
यश

2
मुझे नहीं लगता कि संसाधन के जार में पाए जाने पर यह काम करेगा। तब यह एक फ़ाइल नहीं होगी।
विले ओकारिनेन

16

मुझे अक्सर यह समस्या थी। छोटी परियोजनाओं पर निर्भरता से बचने के लिए, मैं अक्सर एक छोटी उपयोगिता फ़ंक्शन लिखता हूं जब मुझे कॉमन्स io या इस तरह की आवश्यकता नहीं होती है। यहाँ एक स्ट्रिंग बफर में फ़ाइल की सामग्री को लोड करने के लिए कोड है:

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());   

एन्कोडिंग को निर्दिष्ट करना है , उस मामले में महत्वपूर्ण है क्योंकि आप UTF-8 में अपनी फ़ाइल संपादित हो सकता है, और फिर एक जार में डाल दिया, और कंप्यूटर फ़ाइल को खोलता है कि सीपी-1251 अपने मूल फ़ाइल एन्कोडिंग के रूप में हो सकता है (उदाहरण के लिए) ; इसलिए इस मामले में आप लक्ष्य एन्कोडिंग को कभी नहीं जानते हैं, इसलिए स्पष्ट एन्कोडिंग जानकारी महत्वपूर्ण है। इसके अलावा लूप चार्ज द्वारा चार को पढ़ने के लिए अक्षम लगता है, लेकिन इसका उपयोग बफ़रडेडर पर किया जाता है, और इसलिए वास्तव में काफी तेज़ है।


15

आप निम्न कोड फ़ॉर्म जावा का उपयोग कर सकते हैं

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

"फ़ाइलें" और "पथ" कक्षाओं में खींचने के लिए कौन से आयात विवरण की आवश्यकता है?
स्टीव शायर

1
दोनों JDK 7+ से उपलब्ध java.nio.file पैकेज का हिस्सा हैं
रघु के नायर

जार फ़ाइल में काम नहीं करता है।
डिसिप्लिन

4

यदि आप अपने स्ट्रिंग को किसी प्रोजेक्ट संसाधन से प्राप्त करना चाहते हैं जैसे फ़ाइल टेस्‍टकेस / foo.json in src / main / resource अपनी परियोजना में, ऐसा करें:

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

ध्यान दें कि getClassLoader () विधि कुछ अन्य उदाहरणों पर गायब है।


2

अपाचे कॉमन्स FileUtils का उपयोग करें। यह एक विधि readFileToString है


फ़ाइल केवल क्लासपैथ संसाधनों के लिए काम करती है जो हैं, अच्छी तरह से, फाइलें। नहीं अगर वे एक .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 () विधि एक यूआरआई तर्क का समर्थन करती है और क्लासपथ पर जार के अंदर स्थित फ़ाइलों की सामग्री लौटाती है:

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

@ ई-इन्फोरमा Charsetsभी अमरूद में है। इसे देखें: google.github.io/guava/releases/23.0/api/docs
philipjkim

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
IOUtils कहाँ से आते हैं? स्रोत को स्पष्ट रूप से संदर्भित किया जाना चाहिए।
एहतेतल

0

मैंने यहाँ readResource () विधियाँ लिखी हैं , एक सरल आह्वान में इसे करने में सक्षम होने के लिए। यह अमरूद लाइब्रेरी पर निर्भर करता है, लेकिन मुझे अन्य उत्तरों में सुझाए गए JDK- केवल तरीके पसंद हैं और मुझे लगता है कि मैं इन तरीकों को बदल दूंगा।


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रूप से यूनिट / एकीकरण परीक्षण के हिस्से के रूप में JSON फ़ाइलों को पढ़ने के लिए । जैसे

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");

कृपया अपने उत्तर में संक्षिप्त विवरण जोड़ें।
निकोले मिहायलोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.