কীভাবে জাভাতে ক্লাসপাথ থেকে পাঠ্য ফাইলটি পড়তে হয়


366

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

আমি নীচে হিসাবে ফাইলে ইনপুট স্ট্রিম পাওয়ার চেষ্টা করছি:

ফাইলের ডিরেক্টরি ( D:\myDir) ক্লাসস্প্যাটে রাখুন এবং নীচে চেষ্টা করুন:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");

D:\myDir\SomeTextFile.txtCLASSPATH- এ ফাইলের পুরো পাথ রাখুন এবং উপরের 3 লাইনের কোডের চেষ্টা করুন।

তবে দুর্ভাগ্যক্রমে তাদের মধ্যে কেউই কাজ করছে না এবং আমি সর্বদা nullআমার ইনপুট স্ট্রিমে প্রবেশ করি in

উত্তর:


605

ক্লাসপথে ডিরেক্টরি সহ একই ক্লাসলোডার দ্বারা বোঝা ক্লাস থেকে, আপনি যে কোনও একটি ব্যবহার করতে সক্ষম হবেন:

// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

যদি সেগুলি কাজ করে না, তবে এটি অন্য কোনও কিছু ভুল বলে পরামর্শ দেয়।

সুতরাং উদাহরণস্বরূপ, এই কোডটি নিন:

package dummy;

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }
}

এবং এই ডিরেক্টরি কাঠামো:

code
    dummy
          Test.class
txt
    SomeTextFile.txt

এবং তারপরে (ইউনিক্স পাথ বিভাজকটি ব্যবহার করে যেমন আমি লিনাক্স বাক্সে আছি):

java -classpath code:txt dummy.Test

ফলাফল:

true
true

2
আপনি আপেক্ষিক এবং পরম পথ মিশ্রিত করেছেন। "/" দিয়ে শুরু হওয়া একটি পথ পরম (যেমন CLASSPATH এ তালিকাভুক্ত যা থেকে শুরু হয়)। অন্যান্য সকল পাথ ক্লাসের প্যাকেজ যার উপর আপনি কল করতে আপেক্ষিকgetResourceAsStream()
হারুন Digulla

13
না, আপনি আমার উদাহরণটি ভঙ্গ করলেন । আমি মন্তব্যগুলি এটিকে পরিষ্কার করার জন্য সম্পাদনা করব, তবে মুল বক্তব্যটি ClassLoader ব্যবহার করে সমস্ত পাথ ইতিমধ্যে নিখুঁত বলে ধরে নেওয়া হচ্ছে। তাদের আপেক্ষিক হওয়ার মতো কিছুই নেই।
জন স্কিটি

6
এছাড়াও জাভা.আই.ও.ফাই.সপ্যারেটর ব্যবহার করবেন না। এটি উইন্ডোতে কাজ করবে না। আপনি যদি উইন্ডোতে এই কোডটি চালাচ্ছেন তবে এটি এখনও '/' হতে হবে এবং '\' নয়
প্রধান

28
@ প্রধান: না, আপনি ব্যবহার করা উচিত নয় File.Separator- কারণ আপনি কোনও ফাইল চাইছেন না , আপনি একটি সংস্থান চাইছেন । এটি বুঝতে গুরুত্বপূর্ণ যে জড়িত বিমূর্তি ফাইল সিস্টেম নয়।
জন স্কিটি

1
@ জাগডপঞ্জার: আচ্ছা এটি কেবলমাত্র সেই ক্লাসগুলির জন্য যা একই ক্লাসলোডার দ্বারা লোড করা হয়, মূলত - এবং কারণ Class.getResourceAsStreamএটি কল করার জন্য একটি সুবিধাজনক পদ্ধতি ClassLoader.getResourceAsStream, তবে "আপেক্ষিক" সংস্থানগুলির অতিরিক্ত বৈশিষ্ট্য সহ। যদি আপনি একটি নিখুঁত সংস্থান নির্দিষ্ট করে থাকেন, তবে একই শ্রেণীবদ্ধার ব্যবহার করে যে কোনও কল একই কাজ করবে।
জন স্কিটি

115

স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করার সময় (ইউটিলিটি বা কনটেইনার সংগ্রহ হিসাবে - আপনার পরবর্তী কার্যকারিতাটি ব্যবহার করার দরকার নেই) আপনি সহজেই রিসোর্স অ্যাবস্ট্রাকশন ব্যবহার করতে পারেন ।

Resource resource = new ClassPathResource("com/example/Foo.class");

রিসোর্স ইন্টারফেসের মাধ্যমে আপনি ইনপুট স্ট্রিম , ইউআরএল , ইউআরআই বা ফাইল হিসাবে সংস্থানটি অ্যাক্সেস করতে পারবেন । উদাহরণস্বরূপ একটি ফাইল সিস্টেম সংস্থান হিসাবে রিসোর্সের ধরণ পরিবর্তন করা উদাহরণ পরিবর্তন করার একটি সহজ বিষয়।


6
আপনি কী দয়া করে এটি আই / ও ফাইলে ব্যবহার করতে পারবেন সে সম্পর্কে একটি নমুনা কোড সরবরাহ করতে পারেন? ইন্টারনেটে কীভাবে এটি ব্যবহার করা যায় সে সম্পর্কে আমি একটি শালীন , সুস্পষ্ট এবং সোজা উপায় খুঁজে পাচ্ছি না : (((

একটি যাদুমন্ত্র মত কাজ করে. প্রদত্ত একটি লাইনার আপনার যা প্রয়োজন তা হ'ল। স্ট্রিমটি থেকে স্ট্রিং কীভাবে পাবেন তা আপনি যদি না জানেন তবে অন্য উদাহরণগুলি থেকে স্ট্রিমটি পার্সিং ব্যবহার করুন।
জোসেফ লাস্ট

রিসোর্স ভেরিয়েবলের সাথে ঠিক কী করতে হবে তা নির্ধারণ করতে আমার কিছুটা সমস্যা হয়েছিল। আমি উত্তরটি আরও কিছু বিশদ দিয়ে সম্পাদনা করেছি
ডেভিডজেমন

আমি ইতিমধ্যে বসন্ত ব্যবহার করে "শুদ্ধ জাভা" উপায়ে চেষ্টা করছিলাম। এটি আমাকে মেরে ফেলছিল, getResource, getResourceAsStream ইত্যাদির মধ্যে পার্থক্যগুলি, কোনও ভাল কাজের উদাহরণ নেই। এটি এনক্যাপসুলেশনের একটি নিখুঁত উদাহরণ, সুতরাং আমার যত্ন নেওয়ার দরকার নেই।
টিঙ্কারটেনারসফটওয়ার গুয়

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

58

জাভা 7 এনআইও ব্যবহার করে আমি এইভাবে আমার ক্লাসপথে কোনও পাঠ্য ফাইলের সমস্ত লাইন পড়ি:

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

...

Files.readAllLines(
    Paths.get(this.getClass().getResource("res.txt").toURI()), Charset.defaultCharset());

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

এছাড়াও, জাভা 7 যেহেতু অক্ষর সেটগুলি নির্দিষ্ট করার একটি সুবিধাজনক উপায় হ'ল সংজ্ঞায়িত ধ্রুবকগুলি ব্যবহার করা java.nio.charset.StandardCharsets (এটি তাদের জাভাডোক অনুসারে , "জাভা প্ল্যাটফর্মের প্রতিটি প্রয়োগে উপলব্ধ থাকার নিশ্চয়তা রয়েছে।")

সুতরাং, আপনি যদি ইউটিএফ -8 হতে ফাইলটির এনকোডিংটি জানেন তবে স্পষ্টভাবে চরসেটটি নির্দিষ্ট করুন StandardCharsets.UTF_8


1
এনআইও সমাধানের জন্য আপনাকে ধন্যবাদ - খুব কম লোক এই দুর্দান্ত এপিআই ব্যবহার করে এটি লজ্জাজনক।
mvreijn

7
একক স্ট্রিং পড়ার চেষ্টা করুন। স্ট্রিং
থিও ব্রিসকো

2
আমার পক্ষে সেরা সমাধান, কারণ এটি কোনও নির্ভরতার প্রয়োজন নেই, যেমন স্প্রিং বা কমন্স আইও।
বার্নি

1
যদি আপনার রিসোর্স ফাইলটি কোনও জারের মধ্যে থাকে তবে এটি ব্যর্থ হবে eg যে ক্ষেত্রে আপনি ব্যবহার করতে চান কিছু করতে হবে Springএর StreamUtils.copyToString
সোমু

26

চেষ্টা করুন

InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

তোমার চেষ্টা কাজ করে নি কারণ কেবল বর্গ লোডার আপনার ক্লাস ক্লাসপাথ থেকে লোড করতে পারবেন। আপনি জাভা সিস্টেমের জন্যই ক্লাস লোডার ব্যবহার করেছেন।


যদিও "/" সম্পর্কে নিশ্চিত নন। এই ক্ষেত্রে একটি আপেক্ষিক পথ আরও ভাল কাজ করতে পারে।
ভোনসি

3
আপনি যদি এটি "/" ছাড়াই ব্যবহার করেন আপনি "এই" এর প্যাকেজের ভিতরে আপনার ফাইলটি সন্ধান করছেন।
স্পর্শকাতর

1
ইনপুট স্ট্রিম ফাইল = this.getClass ()। GetResourceAsStream ("SomeTextFile.txt"); ইনপুট স্ট্রিম ফাইল = this.getClass ()। GetResourceAsStream ("/ SomeTextFile.txt"); ইনপুট স্ট্রিম ফাইল = this.getClass ()। GetResourceAsStream ("// SomeTextFile.txt"); উপরের
কোনওটিই

@ চৈতন্য: জন স্কিটির উত্তর থেকে আপনি কী উদাহরণ চালাবেন?
অ্যারন দিগুল্লা


20

ফাইলটির সামগ্রীগুলি পড়তে আমি কমন্স আইও + স্প্রিং কোর ব্যবহার করতে পছন্দ করি। ধরে নিচ্ছি জাভা 8:

try (InputStream stream = new ClassPathResource("package/resource").getInputStream()) {
    IOUtils.toString(stream);
}

বিকল্পভাবে:

InputStream stream = null;
try {
    stream = new ClassPathResource("/log4j.xml").getInputStream();
    IOUtils.toString(stream);
} finally {
    IOUtils.closeQuietly(stream);
}

ইনপুটস্ট্রিম বন্ধ সম্পর্কে কি?
স্টিফান

স্ট্রিমটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে। এটি জাভা 7 এর একটি বৈশিষ্ট্য " সংস্থানসমূহের
মাইচা ম্যাকিয়েজ গাওসজকা

কেবলমাত্র যদি এটি চেষ্টা করার স্টেটমেন্টের অভ্যন্তরে থাকে তবে এটি এখানে নেই। এটা তোলে হয়েছে ব্যবহার করে দেখুন থাকা উচিত {... (চূড়ান্ত InputStream প্রবাহ = নতুন ClassPathResource ( "/ log4j.xml") getInputStream ()।)
andresp

15

শ্রেণীর পরম পাথ পেতে চেষ্টা করুন:

String url = this.getClass().getResource("").getPath();

এবং তারপর কি? সেই তথ্য নিজেই ব্যবহার করে না।
লার্নের মার্কুইস

এই তথ্য নিখুঁত ছিল। আমি কেবলমাত্র গেটপথ () মিস করছি!
প্যাট্রিক

@ পেট্রিক এই উত্তরটি 'শ্রেণীর পরম পথ' সরবরাহ করে না। এটি একটি ইউআরএল সরবরাহ করে। মোটেও একই জিনিস নয়।
লার্নের মারকুইস

12

একরকম সেরা উত্তর আমার পক্ষে কাজ করে না। পরিবর্তে আমাকে কিছুটা আলাদা কোড ব্যবহার করা দরকার।

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream is = loader.getResourceAsStream("SomeTextFile.txt");

আমি আশা করি যারা একই সমস্যাটির মুখোমুখি হয় তাদেরকে এটি সহায়তা করবে।


এটি আমাকে অ্যান্ড্রয়েডেও সহায়তা করেছিল যেখানে অ্যাপ্লিকেশন লোডার দ্বারা একটি শ্রেণি লোড করা হয়েছিল, তবে এটির একটি চাবি ইউআই থ্রেডে অলস ছিল।
আসোকান

আপনার পক্ষে সর্বোত্তম উত্তর কেন কাজ করে না তার তথ্য সরবরাহ করা প্রয়োজন (যেমন আপনার অ্যাপ্লিকেশনটির কাঠামো, আপনি যে কাঠামোটি ব্যবহার করছেন, ত্রুটি ইত্যাদি)। সেরা উত্তরে স্পষ্টভাবে বলা হয়েছে যে 1) ডিরেক্টরিটি ক্লাসপথে থাকতে হবে, 2) আপনাকে একই শ্রেণীর লোডার দ্বারা বোঝানো কোনও শ্রেণীর কাছ থেকে অনুরোধ করতে হবে। সম্ভাবনাগুলি এমন একটি অনুমান যা আপনার আবেদনের জন্য ধারণ করে না। হ্যাক হিসাবে এটি প্রবর্তিত হওয়ায় প্রসঙ্গ শ্রেণীর লোডারটি খুব নিরুৎসাহিত। কিছু কাঠামো এটির ব্যবহার করে তবে এর অন্তর্ভুক্তিটি জানা গুরুত্বপূর্ণ (যার জন্য আপনি আপনার প্রকল্পের পটভূমি বর্ণনা করতে পারেন)
জিনচাও

6

আপনি যদি পেয়ারা ব্যবহার করেন:

import com.google.common.io.Resources;

আমরা ক্লাসস্প্যাথ থেকে URL পেতে পারি:

URL resource = Resources.getResource("test.txt");
String file = resource.getFile();   // get file path 

বা ইনপুট স্ট্রিম:

InputStream is = Resources.getResource("test.txt").openStream();

রিসোর্সটি জেআর বা ওয়ার ফাইলে থাকলে ফাইল পাথের কোনও ব্যবহার হয় না।
মার্কুইস

URL- এর getFile পদ্ধতি কোনও ফাইলের নাম দেয় না return এটি কেবলমাত্র ইউআরএল এর পাথ অংশটি ফেরত দেয়, যা কোনও বৈধ ফাইল নাম হওয়ার নিশ্চয়তা দেয় না। (ইউআরএল বর্গটি জাভা ১.০ এর অংশ ছিল; তারপরে, বেশিরভাগ ইউআরএল আসলে একই কম্পিউটার বা অন্য কম্পিউটারের প্রকৃত ফাইলগুলিকে বোঝায়))
ভিজিআর

3

স্ট্রিং থেকে কোনও ফাইলের বিষয়বস্তু পড়তে classpath, আপনি এটি ব্যবহার করতে পারেন:

private String resourceToString(String filePath) throws IOException, URISyntaxException
{
    try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath))
    {
        return IOUtils.toString(inputStream);
    }
}

দ্রষ্টব্য:
IOUtilsএর অংশ Commons IO

এটিকে কল করুন:

String fileContents = resourceToString("ImOnTheClasspath.txt");

1

আপনি বলছেন "আমি একটি পাঠ্য ফাইলটি পড়ার চেষ্টা করছি যা ক্লাসস্প্যাথ সিস্টেম ভেরিয়েবলে সেট করা আছে" " আমার ধারণা এটি উইন্ডোতে রয়েছে এবং আপনি "সিস্টেম ভেরিয়েবলস" সম্পাদনা করতে এই কুশ্রী ডায়লগটি ব্যবহার করছেন।

এখন আপনি কনসোলে আপনার জাভা প্রোগ্রামটি চালান। এবং এটি কাজ করে না: কনসোলটি একবার সিস্টেম ভেরিয়েবলের মানগুলির একটি অনুলিপি শুরু হয়ে গেলে তা পায় । এর অর্থ ডায়লগের পরে কোনও পরিবর্তন কোনও প্রভাব নেই effect

এই সমাধান আছে:

  1. প্রতিটি পরিবর্তনের পরে একটি নতুন কনসোল শুরু করুন

  2. set CLASSPATH=...কনসোলে ভেরিয়েবলের অনুলিপি সেট করতে কনসোলটিতে ব্যবহার করুন এবং যখন আপনার কোডটি কাজ করে, ভেরিয়েবল ডায়ালগটিতে শেষ মানটি পেস্ট করুন।

  3. জাভাতে কলটি .BATফাইলের মধ্যে রাখুন এবং এটিতে ডাবল ক্লিক করুন। এটি প্রতিবার একটি নতুন কনসোল তৈরি করবে (এভাবে সিস্টেমের ভেরিয়েবলের বর্তমান মানটি অনুলিপি করা হয়)।

সতর্কতা: আপনার যদি একটি ব্যবহারকারী ভেরিয়েবল থাকে CLASSPATHতবে এটি আপনার সিস্টেমের পরিবর্তনশীলকে ছায়া দিবে। এ কারণেই আপনার জাভা প্রোগ্রামে কলটি কোনও .BATফাইলে ফেলা এবং সেখানে শ্রেণিপথ সেট করা (ব্যবহার করে) রাখা ভালset CLASSPATH= কোনও গ্লোবাল সিস্টেম বা ব্যবহারকারী ভেরিয়েবলের উপর নির্ভর না ) ।

এটি আপনার কম্পিউটারে একাধিক জাভা প্রোগ্রাম কাজ করতে পারে তাও নিশ্চিত করে কারণ তাদের আলাদা ক্লাসপাথ থাকতে বাধ্য।


0

আমার উত্তরটি প্রশ্নটিতে যা বলা হয় ঠিক তা নয়। বরং আমি আমাদের প্রকল্পের শ্রেণীর পথ থেকে জাভা অ্যাপ্লিকেশনটিতে ফাইলটি সহজেই কীভাবে পড়তে পারি ঠিক তেমন একটি সমাধান দিচ্ছি।

উদাহরণস্বরূপ ধরুন একটি কনফিগার ফাইলের নাম উদাহরণ.xML নীচের মতো কোনও পথে অবস্থিত: -

com.myproject.config.dev

এবং আমাদের জাভা এক্সিকিউটেবল ক্লাস ফাইলটি নীচের পথে রয়েছে: -

com.myproject.server.main

এখন কেবল উপরের উভয় পথেই যাচাই করুন যা নিকটতম সাধারণ ডিরেক্টরি / ফোল্ডার যেখানে আপনি উভয়ই অ্যাক্সেস করতে পারবেন দেব এবং প্রধান ডিরেক্টরি / ফোল্ডার (com.myproject.server.main - যেখানে আমাদের অ্যাপ্লিকেশনটির জাভা এক্সিকিউটেবল শ্রেণি বিদ্যমান) - আমরা দেখতে পাচ্ছি এটি মাইপ্রজেক্ট ফোল্ডার / ডিরেক্টরি যা নিকটতম সাধারণ ডিরেক্টরি / ফোল্ডার যেখানে থেকে আমরা আমাদের উদাহরণ.xML ফাইল অ্যাক্সেস করতে পারি। অতএব ফোল্ডার / ডিরেক্টরির মধ্যে একটি জাভা এক্সিকিউটেবল বর্গ বসবাস থেকে প্রধান আমরা ফিরে মত দুই ধাপ যেতে হবে ../../ অ্যাক্সেস করতে myproject । এখন এটি অনুসরণ করে দেখুন কীভাবে আমরা ফাইলটি পড়তে পারি: -

package com.myproject.server.main;

class Example {

  File xmlFile;

  public Example(){
       String filePath = this.getClass().getResource("../../config/dev/example.xml").getPath();
       this.xmlFile = new File(filePath);
    }

  public File getXMLFile() {
      return this.xmlFile;
  }
   public static void main(String args[]){
      Example ex = new Example();
      File xmlFile = ex.getXMLFile();
   }
}

0

আপনি যদি জার ফাইলটিতে আপনার প্রকল্পটি সংকলন করেন: আপনি নিজের ফাইলটি সংস্থান / ফাইল / আপনার_ফিল.টিেক্সট বা পিডিএফ এ রাখতে পারেন;

এবং এই কোডটি ব্যবহার করুন:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;

public class readFileService(){
    private static final Logger LOGGER = LoggerFactory.getLogger(readFileService.class);


    public byte[] getFile(){
        String filePath="/files/your_file";
        InputStream inputStreamFile;
        byte[] bytes;
        try{
            inputStreamFile = this.getClass().getResourceAsStream(filePath);
            bytes = new byte[inputStreamFile.available()];
            inputStreamFile.read(bytes);    
        } catch(NullPointerException | IOException e) {
            LOGGER.error("Erreur read file "+filePath+" error message :" +e.getMessage());
            return null;
        }
        return bytes;
    } 
}

-1

আমি ওয়েবস্পিয়ার অ্যাপ্লিকেশন সার্ভার ব্যবহার করছি এবং আমার ওয়েব মডিউলটি স্প্রিং এমভিসি তে নির্মিত। Test.propertiesসম্পদ ফোল্ডারে অবস্থিত ছিল, আমি নিম্নলিখিত ব্যবহার করে এই ফাইল লোড করার চেষ্টা:

  1. this.getClass().getClassLoader().getResourceAsStream("Test.properties");
  2. this.getClass().getResourceAsStream("/Test.properties");

উপরের কোডগুলির মধ্যে কোনওটিই ফাইলটি লোড করে নি।

তবে নীচের কোডটির সাহায্যে সম্পত্তি ফাইলটি সফলভাবে লোড করা হয়েছিল:

Thread.currentThread().getContextClassLoader().getResourceAsStream("Test.properties");

ব্যবহারকারী "user1695166" ধন্যবাদ ।


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

-1

ব্যবহার org.apache.commons.io.FileUtils.readFileToString(new File("src/test/resources/sample-data/fileName.txt"));


এসআরসি-তে রেফারেন্স ব্যবহার করা উচিত নয় ... চূড়ান্ত নিদর্শনগুলিতে কাজ করে না।
এল। হল্যান্ডা

-1

দৃশ্যপট:

1) client-service-1.0-SNAPSHOT.jarনির্ভরতা আছেread-classpath-resource-1.0-SNAPSHOT.jar

2) আমরা শ্রেণি পথের সংস্থানগুলির সামগ্রীটি পড়তে চাই (sample.txt ) এর read-classpath-resource-1.0-SNAPSHOT.jarমাধ্যমেclient-service-1.0-SNAPSHOT.jar

3) read-classpath-resource-1.0-SNAPSHOT.jar আছেsrc/main/resources/sample.txt

এখানে আমি তৈরি নমুনা কোডটি কাজ করছি, আমার বিকাশের সময় নষ্ট করার 2-3days পরে, আমি সম্পূর্ণ শেষ থেকে শেষ সমাধান পেয়েছি, আশা করি এটি আপনার সময় বাঁচাতে সহায়তা করবে

1।pom.xml এরread-classpath-resource-1.0-SNAPSHOT.jar

<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>jar-classpath-resource</groupId>
            <artifactId>read-classpath-resource</artifactId>
            <version>1.0-SNAPSHOT</version>
            <name>classpath-test</name>
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <org.springframework.version>4.3.3.RELEASE</org.springframework.version>
                <mvn.release.plugin>2.5.1</mvn.release.plugin>
                <output.path>${project.artifactId}</output.path>
                <io.dropwizard.version>1.0.3</io.dropwizard.version>
                <commons-io.verion>2.4</commons-io.verion>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${org.springframework.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${org.springframework.version}</version>
                </dependency>
                <dependency>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                    <version>${commons-io.verion}</version>
                </dependency>
            </dependencies>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>${mvn.release.plugin}</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.5</version>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <archive>
                                <manifest>
                                    <addClasspath>true</addClasspath>
                                    <useUniqueVersions>false</useUniqueVersions>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                    <mainClass>demo.read.classpath.resources.ClassPathResourceReadTest</mainClass>
                                </manifest>
                                <manifestEntries>
                                    <Implementation-Artifact-Id>${project.artifactId}</Implementation-Artifact-Id>
                                    <Class-Path>sample.txt</Class-Path>
                                </manifestEntries>
                            </archive>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-shade-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>shade</goal>
                                </goals>
                                <configuration>
                                    <transformers>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                            <mainClass>demo.read.classpath.resources.ClassPathResourceReadTest</mainClass>
                                        </transformer>
                                    </transformers>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </project>

2।ClassPathResourceReadTest.java শ্রেণিতে read-classpath-resource-1.0-SNAPSHOT.jarযে শ্রেণীর পাঠ্য উত্স ফাইলের সামগ্রীতে লোড হয়।

package demo.read.classpath.resources;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public final class ClassPathResourceReadTest {
    public ClassPathResourceReadTest() throws IOException {
        InputStream inputStream = getClass().getResourceAsStream("/sample.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        List<Object> list = new ArrayList<>();
        String line;
        while ((line = reader.readLine()) != null) {
            list.add(line);
        }
        for (Object s1: list) {
            System.out.println("@@@ " +s1);
        }
        System.out.println("getClass().getResourceAsStream('/sample.txt') lines: "+list.size());
    }
}

3।pom.xml এরclient-service-1.0-SNAPSHOT.jar

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>client-service</groupId>
    <artifactId>client-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>jar-classpath-resource</groupId>
            <artifactId>read-classpath-resource</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <useUniqueVersions>false</useUniqueVersions>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <mainClass>com.crazy.issue.client.AccessClassPathResource</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Artifact-Id>${project.artifactId}</Implementation-Artifact-Id>
                            <Implementation-Source-SHA>${buildNumber}</Implementation-Source-SHA>
                            <Class-Path>sample.txt</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.crazy.issue.client.AccessClassPathResource</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

4।AccessClassPathResource.javaClassPathResourceReadTest.java ক্লাস ইনস্ট্যান্ট করুন যেখানে এটি লোড হতে চলেছে sample.txtএবং এর সামগ্রীগুলিও মুদ্রণ করবে।

package com.crazy.issue.client;

import demo.read.classpath.resources.ClassPathResourceReadTest;
import java.io.IOException;

public class AccessClassPathResource {
    public static void main(String[] args) throws IOException {
        ClassPathResourceReadTest test = new ClassPathResourceReadTest();
    }
}

5. নিম্নলিখিত হিসাবে এক্সিকিউটেবল জার চালান:

[ravibeli@localhost lib]$ java -jar client-service-1.0-SNAPSHOT.jar
****************************************
I am in resources directory of read-classpath-resource-1.0-SNAPSHOT.jar
****************************************
3) getClass().getResourceAsStream('/sample.txt'): 3

-2

GetClassLoader () পদ্ধতি ব্যবহার করবেন না এবং ফাইলের নামের আগে "/" ব্যবহার করবেন না। "/" খুবই গুরুত্বপূর্ণ

this.getClass().getResourceAsStream("/SomeTextFile.txt");

নেতৃস্থানীয় /ব্যবহারের getClassLoader()পদ্ধতিটি ব্যবহার করার মতো একই প্রভাব রয়েছে ।
লার্নের মারকুইস

-4
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReadFile

{
    /**
     * * feel free to make any modification I have have been here so I feel you
     * * * @param args * @throws InterruptedException
     */

    public static void main(String[] args) throws InterruptedException {
        // thread pool of 10
        File dir = new File(".");
        // read file from same directory as source //
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                // if you wanna read file name with txt files
                if (file.getName().contains("txt")) {
                    System.out.println(file.getName());
                }

                // if you want to open text file and read each line then
                if (file.getName().contains("txt")) {
                    try {
                        // FileReader reads text files in the default encoding.
                        FileReader fileReader = new FileReader(
                                file.getAbsolutePath());
                        // Always wrap FileReader in BufferedReader.
                        BufferedReader bufferedReader = new BufferedReader(
                                fileReader);
                        String line;
                        // get file details and get info you need.
                        while ((line = bufferedReader.readLine()) != null) {
                            System.out.println(line);
                            // here you can say...
                            // System.out.println(line.substring(0, 10)); this
                            // prints from 0 to 10 indext
                        }
                    } catch (FileNotFoundException ex) {
                        System.out.println("Unable to open file '"
                                + file.getName() + "'");
                    } catch (IOException ex) {
                        System.out.println("Error reading file '"
                                + file.getName() + "'");
                        // Or we could just do this:
                        ex.printStackTrace();
                    }
                }
            }
        }

    }

}

কোনওভাবেই প্রশ্নের উত্তর দেয় না।
লার্নের মারকুইস

-5

আপনার জাভা ক্লাসপথে আপনার 'সিস্টেম পরিবর্তনশীল' রাখতে হবে।


আমি সিস্টেম ভেরিয়েবল নিজেই রেখেছি।
চৈতন্য এমএসভি

'সিস্টেম ভেরিয়েবল' হ'ল জাভা ক্লাসস্প্যাথ। উত্তরের অর্থ হয় না।
লার্নের মার্কুইস

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