JUnit- এ কীভাবে src / পরীক্ষা / সংস্থান ডিরেক্টরিতে পাবে?


275

আমি জানি যে আমি এসআরসি / পরীক্ষা / সংস্থান থেকে একটি ফাইল লোড করতে পারি:

getClass().getResource("somefile").getFile()

তবে কীভাবে আমি এসআরসি / টেস্ট / রিসোর্স ডিরেক্টরিটির পুরো পথ পাব , অর্থাৎ আমি কোনও ফাইল লোড করতে চাই না, আমি কেবল ডিরেক্টরিটির পথটি জানতে চাই?


1
কৌতূহলের বাইরে: আপনি কেন জানতে চান?
fge

3
@fge এটি পরীক্ষার অধীনে আপত্তি করতে পাস করতে হবে, যা এটি একটি ফাইল লোড করতে ব্যবহার করে
ররি

5
আপনার সংস্থান ডিরেক্টরিতে সরাসরি ফাইল অ্যাক্সেস একটি খারাপ ধারণা। বাষ্প চালনার জন্য আপনার কোডটি রিফ্যাক্টর করুন, বা আপনার পরীক্ষার জন্য একটি টেম্পোরারি ফোল্ডারে প্রথমে একটি অনুলিপি তৈরি করুন।
অলিভার চার্লসওয়ার্থ

4
@ অলিভারচারসওয়ার্থ আমি টেম্প ফোল্ডারগুলি সম্পর্কে একমত এবং org.junit.rules.TemporaryFolderসব সময় ব্যবহার করি ... তবে ... পরীক্ষা / সংস্থান থেকে অনুলিপি করতে আপনার জানা দরকার, এর উপায়!
মাইক রডেন্ট

1
@ মাইক্রোডেন্ট - আমি যা মনে করি তা হ'ল ইনপুটস্ট্রিমের মাধ্যমে রিসোর্সটি পড়ুন এবং তারপরে এটি একটি অস্থায়ী ফাইলে লিখুন।
অলিভার চার্লসওয়ার্থ

উত্তর:


204

ClassLoaderশ্রেণীর সাথে কাজ করার চেষ্টা করুন :

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("somefile").getFile());
System.out.println(file.getAbsolutePath());

ClassLoaderক্লাসে লোড করার জন্য দায়ী। প্রতিটি শ্রেণীর একটিতে একটি রেফারেন্স রয়েছে ClassLoader। এই কোডটি Fileরিসোর্স ডিরেক্টরি থেকে একটি প্রদান করে। getAbsolutePath()এটির উপর কল করা তার পরম ফিরে আসে Path

জাভাডোক এর জন্য ClassLoader: http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html


34
এটি অগত্যা একটি ভাল ধারণা নয়। যদি সংস্থানটি কোনও জারে থাকে তবে এটি দুঃখজনক সময় নিয়ে যাবে।
অলিভার চার্লসওয়ার্থ

1
@ অলিভারচারসওয়ার্থ তাই, জারের ক্ষেত্রে কী করা যায়?
আনমল সিং জাগি

@ আনমোলসিংহ জাগি - মূল প্রশ্নের নীচে আমার মন্তব্য দেখুন :)
অলিভার চার্লসওয়ার্থ

ম্যাভেন বিল্ড ব্যর্থ হয় যখন আমি এই সমাধানটি ব্যবহার করি
ফার্স্টপোস্টকমেন্টার

এটি ফাইলের নাম
সহও থাকবে

299

আপনার ক্লাস লোডারদের সাথে ঝামেলা করার দরকার নেই। প্রকৃতপক্ষে এটি a োকা একটি খারাপ অভ্যাস কারণ শ্রেণি লোডার সংস্থানগুলি java.io. ফাইলগুলি যখন কোনও জার্ক সংরক্ষণাগারে থাকে সেগুলি ফাইলে থাকে না

মাভেন পরীক্ষা চালানোর আগে স্বয়ংক্রিয়ভাবে বর্তমান চলমান ডিরেক্টরিটি সেট করে, তাই আপনি কেবল ব্যবহার করতে পারেন:

    File resourcesDirectory = new File("src/test/resources");

resourcesDirectory.getAbsolutePath() আপনার যদি সত্যই এটি প্রয়োজন হয় তবে সঠিক মানটি ফিরিয়ে দেবে।

আমি src/test/dataযদি আপনার টেস্টগুলি ফাইল সিস্টেমের মাধ্যমে ডেটা অ্যাক্সেস করতে চান তবে একটি ডিরেক্টরি তৈরি করার পরামর্শ দিই । এটি আপনি কী করছেন তা স্পষ্ট করে দেয়।


4
নতুন ফাইল ("এসসিআর / পরীক্ষা / সংস্থান / ফাইল এক্সওয়াইজেড"); কাজ করবে না. আপনি যদি এটিকে JUnit পরীক্ষায় সহজভাবে প্রবেশ করেন তবে গ্রহন থেকে বা মাভেন থেকেও নয়।
seba.wagner

11
এটি মাভেনের থেকে ঠিক কাজ করে। গ্রহণে আপনাকে পরীক্ষা দৌড়ে বর্তমান চলমান ডিরেক্টরিটি সেট করতে হবে তবে কমান্ড লাইন মেভেন এটি আপনার জন্য করে।
স্টিভ সি

4
আমি তাই মনে করি না. আর তুমি কেন করবে যে আপনি কেবল আমরাও অন্ধকার মধ্যে কিংবা ম্যাভেন কিছু সেট আপ করার জন্য কোনো প্রয়োজন ছাড়া একটি "নতুন ফাইল (getClass () getClassLoader () getResource (।।" FileNameXYZ.xml ")" do করতে
Seba .wagner

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

2
ইন্টেলিজি ২০১৪ সংস্করণের জন্য, @ স্টিভ সি উল্লিখিত হিসাবে আমাকে এখনও পরীক্ষা পদ্ধতি / শ্রেণীর রান / ডিবাগ কনফিগারেশনগুলিতে ওয়ার্কিং ডিরেক্টরিটি পরিবর্তন করতে হয়েছিল।
এ_সেন্টুসিয়াসট

76

আমি কেবল Pathজাভা 7 থেকে ব্যবহার করব

Path resourceDirectory = Paths.get("src","test","resources");

পরিষ্কার এবং পরিচ্ছন্ন!


এই একই কোডটি কি উইন্ডোজে কাজ করবে? জাভাডোক Paths.get(...)পরামর্শ দেয় (যাইহোক আমার কাছে) যে এটি হবে না।
স্টিভ সি

@ স্টিভ সি আপনি File.separatorস্ট্রিংটিকে একটি পাথ হিসাবে ব্যবহার করার জন্য ধ্রুবকটি ব্যবহার করতে পারেন
JeanValjean

1
আমি জানি, তবে এটি খুব কুরুচিপূর্ণ। বিপরীতে, new File("src/test/resources")সমস্ত প্ল্যাটফর্মগুলিতে সঠিক জিনিসটি করে।
স্টিভ সি

2
শুধু ব্যবহার Path resourceDirectory = Paths.get("src","test","resources");করবেন না কেন ?
নবনিথ

1
হুম, Paths.get("src", "test", "resources")এবং Paths.get("src/test/resources")আমার জন্য উইন্ডোজ 10 এ ঠিকঠাক কাজ করুন। আমি কি ভুল করছি? =)
নেক্সা

24

যদি এটি একটি বসন্তের প্রকল্প হয় তবে আমরা এসসিআর / টেস্ট / রিসোর্স ফোল্ডার থেকে ফাইলগুলি পেতে নীচের কোডটি ব্যবহার করতে পারি ।

File file = ResourceUtils.getFile(this.getClass().getResource("/some_file.txt"));

14

JUnit 4.12 এবং জাভা 8 ব্যবহার করে আমার একটি মাভেন 3 প্রকল্প রয়েছে। এর myxml.xmlঅধীন কল করা কোনও ফাইলের পাথ পেতে src/test/resources, আমি পরীক্ষার কেস থেকেই এটি করি:

@Test
public void testApp()
{
    File inputXmlFile = new File(this.getClass().getResource("/myxml.xml").getFile());
    System.out.println(inputXmlFile.getAbsolutePath());
    ...
}

ইন্টেলিজ আইডিই দিয়ে উবুন্টু 14.04 এ পরীক্ষিত। এখানে রেফারেন্স ।


11

এর সমস্ত সামগ্রী ফোল্ডারে src/test/resourcesঅনুলিপি করা হয়েছে target/test-classes। সুতরাং মাভেন বিল্ড চলাকালীন পরীক্ষার সংস্থান থেকে ফাইল পাওয়ার জন্য আপনাকে এটিকে test-classesফোল্ডার থেকে লোড করতে হবে :

Paths.get(
    getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
).resolve(
    Paths.get("somefile")
).toFile()

ভাঙ্গা:

  1. getClass().getProtectionDomain().getCodeSource().getLocation().toURI()- আপনাকে ইউআরআই দেবে target/test-classes
  2. resolve(Paths.get("somefile"))- ফোল্ডারে সংশোধন someFileকরে target/test-classes

মূল anwser থেকে নেওয়া হয় এই


8

@ স্টিভ সি এবং @ অ্যাশোসবার্ন 1 দ্বারা প্রদত্ত বিকল্পগুলির মধ্যে পার্থক্য এবং প্রতিবন্ধকতা রয়েছে। তাদের অবশ্যই নির্দিষ্ট করা উচিত, আমি বিশ্বাস করি।

আমরা যখন ব্যবহার করতে পারেন করতে পারেন: File resourcesDirectory = new File("src/test/resources");?

  • 1 যখন পরীক্ষাগুলি কেবল মেভেনের মাধ্যমে চালানো হয় তবে আইডিইয়ের মাধ্যমে নয়।
  • ২.১ যখন টেস্টগুলি মেভেন বা মাধ্যমে চালানো হবে
  • আইডিই এর মাধ্যমে ২.২ এবং আইডিইতে কেবল একটি প্রকল্প আমদানি করা হয়। (আমি "আমদানি" শব্দটি ব্যবহার করি, কারণ এটি ইন্টেলিজ আইডিইএতে ব্যবহৃত হয় I আমি মনে করি গ্রহনের ব্যবহারকারীরাও তাদের মভেন প্রকল্পটি আমদানি করে)। এটি কাজ করবে, আপনি যখন আইডিইর মাধ্যমে পরীক্ষা চালান তখন আপনার প্রকল্পের মতোই কাজ করার ডিরেক্টরি তৈরি করে।
  • ৩.১ যখন টেস্টগুলি মেভেন বা মাধ্যমে চালানো হবে
  • আইডিই এর মাধ্যমে ৩.২, এবং একাধিক প্রকল্প আইডিইতে আমদানি করা হয় (যখন আপনি ছাত্র নন, আপনি সাধারণত বেশ কয়েকটি প্রকল্প আমদানি করেন) এবং আইডিইর মাধ্যমে পরীক্ষা চালানোর আগে আপনি নিজের পরীক্ষার জন্য ওয়ার্ক ডিরেক্টরিটি কনফিগার করেন। এই কার্যনির্বাহী ডিরেক্টরিতে আপনার আমদানিকৃত প্রকল্পের উল্লেখ করা উচিত যা পরীক্ষাগুলি ধারণ করে। ডিফল্টরূপে, আইডিইতে আমদানি করা সমস্ত প্রকল্পের ওয়ার্কিং ডিরেক্টরি কেবল একটি। সম্ভবত এটি কেবলমাত্র একটি সীমাবদ্ধতা IntelliJ IDEA, তবে আমি মনে করি সমস্ত আইডিই এটির মতো কাজ করে। এবং এই কনফিগারেশনটি ম্যানুয়ালি করতে হবে, এটি মোটেই ভাল নয়। বিভিন্ন মভেন প্রকল্পে বিদ্যমান কয়েকটি পরীক্ষার সাথে কাজ করা, তবে একটি বড় "আইডিই" প্রকল্পে আমদানি করা, আমাদের এটি মনে রাখতে বাধ্য করুন এবং আপনার কাজটি থেকে শিথিল হতে এবং আনন্দ পেতে অনুমতি দেবেন না।

@ Ashosborne1 দ্বারা প্রদত্ত সমাধানটির জন্য (ব্যক্তিগতভাবে আমি এটিকে পছন্দ করি) আপনার আরও 2 টি প্রয়োজনীয় প্রয়োজনীয়তা যা আপনার পরীক্ষা চালানোর আগে করা উচিত। এই সমাধানটি ব্যবহারের জন্য পদক্ষেপের একটি তালিকা এখানে রয়েছে:

  • “এসসিআর / টেস্ট / রিসোর্স /” এর অভ্যন্তরে একটি পরীক্ষা ফোল্ডার ("তেভা") এবং ফাইল ("রিডমি") তৈরি করুন:

    src / পরীক্ষা / সম্পদ / teva / রিডমি

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

  • কমপক্ষে একবার প্রকল্পের মাধ্যমে বিল্ড করুন mvn clean install। এটি পরীক্ষাও চালাবে। পুরো প্রকল্পটি তৈরি না করেই কেবল আপনার পরীক্ষার শ্রেণি / পদ্ধতিটি ম্যাভেনের মাধ্যমে চালানো যথেষ্ট। ফলস্বরূপ আপনার পরীক্ষার সংস্থানগুলি পরীক্ষার শ্রেণিতে অনুলিপি করা হবে, এখানে একটি পথ:target/test-classes/teva/readme

  • এর পরে, আপনি @ ashosborne1 দ্বারা ইতিমধ্যে প্রস্তাবিত কোড ব্যবহার করে ফোল্ডারটি অ্যাক্সেস করতে পারেন (দুঃখিত, আমি এই আইটেমের তালিকার ভিতরে এই কোডটি সঠিকভাবে সম্পাদনা করতে পারিনি):

public static final String TEVA_FOLDER = "teva"; ... 
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER); 
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();

এখন আপনি যতবার চান IDE এর মাধ্যমে আপনার পরীক্ষা চালাতে পারেন। যতক্ষণ না আপনি এমভিএন ক্লিন চালান। এটি লক্ষ্যযুক্ত ফোল্ডারটি ফেলে দেবে।

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

আপনি জিজ্ঞাসা করতে পারেন, আইডিইতে আমার কেন একাধিক মভেন প্রকল্প আমদানি করা দরকার এবং এত জটিল জিনিস কেন? আমার জন্য, অন্যতম প্রধান অনুপ্রেরণা: আইডিএ সম্পর্কিত ফাইলগুলি কোড থেকে দূরে রাখা। আমি প্রথম আমার আইডিইতে একটি নতুন প্রকল্প তৈরি করি। এটি একটি জাল প্রকল্প, এটি আইডিই সম্পর্কিত ফাইলগুলির একটি ধারক মাত্র। তারপরে, আমি ইতিমধ্যে বিদ্যমান মেভেন প্রকল্পগুলি আমদানি করি। আমি এই আমদানি করা প্রকল্পগুলিকে আইডিইএ ফাইলগুলি কেবলমাত্র আমার মূল জাল প্রকল্পে রাখতে বাধ্য করি। ফলস্বরূপ আমি কোডের মধ্যে আইডিই সম্পর্কিত ফাইলগুলি দেখতে পাচ্ছি না। এসভিএন তাদের দেখতে পাবে না (দয়া করে এই জাতীয় ফাইলগুলি উপেক্ষা করার জন্য এসএনএন / গিট কনফিগার করার প্রস্তাব দিবেন না)। এছাড়াও এটি ঠিক খুব সুবিধাজনক।


হাই আলেকজান্দ্র, আমি টার্গেট / ক্লাস এবং এসআরসি / মেইন / রিসোর্সে রিসোর্স ফাইলটি নিয়ে সমস্যায় আছি এবং আপনি এ সম্পর্কে একমাত্র কথা বলে মনে করছেন। প্রথমে আমার কাছে এসআরসি / মেইন / রিসোর্সে ফাইল রয়েছে, বিল্ড প্রজেক্টের পরে, এই ফাইলগুলি টার্গেট / ক্লাসে অনুলিপি করে। এবং এ থেকে, getClass ()। GetClassLoader ()। GetResource (fileName) শুধুমাত্র টার্গেট ফোল্ডারে কাজ করে যখন আমি চাই এসসিআর / মেইন এ কাজ করি। আপনি আমাকে getResource ফাইলের প্রক্রিয়া সম্পর্কে কোথাও ব্যাখ্যা লিঙ্ক দিতে পারেন? রিসোর্স ফোল্ডারটি কীভাবে কনফিগার করবেন? পদক্ষেপ: ডি
হুই হাম হান

2
@ হুই হাম হান, আমি এটি না করার পরামর্শ দিচ্ছি। আমি আশঙ্কা করছি আপনি ভুল পথে চলে যেতে পারেন certain এখানে কিছু নির্দিষ্ট জায়গা রয়েছে যেখানে রিসোর্স ফাইলগুলি অবস্থিত, স্থানগুলি অন্য সকলের জন্য পরিচিত। এই জাতীয় প্রকল্পগুলি বজায় রাখা সহজ। এমনকি আপনার জন্য এটি আরও সহজ হবে, আপনার কেবল খাঁটি প্রকল্পগুলির কাঠামো বুঝতে হবে। তবে নিশ্চিতভাবেই, আপনি [ maven.apache.org/plugins/maven-resources-plugin/example/…
আলেকজান্ডার

@ HuyHómHỉnh, এছাড়াও সমাধান এখানে কটাক্ষপাত আছে: stackoverflow.com/questions/23289098/... কিন্তু কনফিগার করতে আপনি কি SRC / প্রধান একটি সম্পদ হিসেবে ... এটা এড়ানোর করার চেষ্টা করুন, আপনার কি কিছু বেঘাত বলে মনে হয়।
আলেকজান্ডার

HM। আপনি কী ব্যাখ্যা করতে পারেন যে এতে কী হয়েছে .gitignore? এছাড়াও দেখে মনে হচ্ছে IDEA টেস্ট চালানোর সময় স্বয়ংক্রিয়ভাবে মাভেনকে চালায় (এবং ডিফল্টরূপে সঠিক ওয়ার্কিং ডির সেট করে $MODULE_DIR$)। সুতরাং এর mvn testআগে ম্যানুয়ালি চালানোর কোনও দরকার নেই , মাভেন এবং আইডিইএ উভয়ই ঠিক সঙ্গে সবকিছু ঠিকঠাক করে "src/test/resources/somefile.txt"
অ্যালেক্স পি

5

আমি যে সহজ এবং পরিষ্কার সমাধানটি ব্যবহার করি তা ধরুন, পরীক্ষার শ্রেণীর নাম TestQuery1এবং নীচে resourcesআপনার testফোল্ডারে একটি ডিরেক্টরি রয়েছে :

├── java
   └── TestQuery1.java
└── resources
    └── TestQuery1
        ├── query.json
        └── query.rq

এর ইউআরআই পেতে TestQuery1:

URL currentTestResourceFolder = getClass().getResource("/"+getClass().getSimpleName());

যে কোনও একটি ফাইলের ইউআরআই পেতে, এটি করুন TestQuery1:

File exampleDir = new File(currentTestResourceFolder.toURI());
URI queryJSONFileURI = exampleDir.toURI().resolve("query.json");

1
কোনও উদ্বেগ নেই, আসলে আপনার সহায়তার জন্য আপনাকে ধন্যবাদ !! ভাল জিনিস হ'ল আপনার উত্তর মুছে ফেলা, আমি প্রশ্ন মুছে ফেলতে সক্ষম। হ্যাঁ, বেশ হতাশ এখানেও, তবে যাইহোক ধন্যবাদ !! শুভ সন্ধ্যা :)
নূর

1

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

সবচেয়ে সহজ সমাধান হতে পারে:

  1. অস্থায়ী ফোল্ডারে রিসোর্স থেকে একটি ফাইল অনুলিপি করুন এবং সেই অস্থায়ী ফাইলে পাথ পান।
  2. একটি অস্থায়ী পথ ব্যবহার করে পরীক্ষা করুন।
  3. অস্থায়ী ফাইলটি মুছুন।

TemporaryFolderথেকে JUnitপরীক্ষামূলকভাবে কমপ্লিট হওয়ার পরে অস্থায়ী ফাইল তৈরি করতে এবং মুছতে ব্যবহার করা যেতে পারে। থেকে ক্লাসguavaলাইব্রেরি একটি ফাইল ফর্ম রিসোর্স ফোল্ডার অনুলিপি করতে ব্যবহৃত হয়।

অনুগ্রহ করে লক্ষ্য করুন যে আমরা যদি রিসোর্স ফোল্ডারে সাবফোল্ডার ব্যবহার করি তবে এর মতো goodআমাদেরও /সংস্থানের পথটি যোগ করতে হবে না ।

public class SomeTest {

    @Rule
    public TemporaryFolder tmpFolder = new TemporaryFolder();


    @Test
    public void doSomethinge() throws IOException {
        File file = createTmpFileFromResource(tmpFolder, "file.txt");
        File goodFile = createTmpFileFromResource(tmpFolder, "good/file.txt");

        // do testing here
    }

    private static File createTmpFileFromResource(TemporaryFolder folder,
                                                  String classLoaderResource) throws IOException {
        URL resource = Resources.getResource(classLoaderResource);

        File tmpFile = folder.newFile();
        Resources.asByteSource(resource).copyTo(Files.asByteSink(tmpFile));
        return tmpFile;
    }

}

0

আপনার ইউনিট পরীক্ষায় বসন্তের সাথে হাইবারনেট ইনজেকশন করতে নিম্নলিখিতটি ব্যবহার করুন:

@Bean
public LocalSessionFactoryBean getLocalSessionFactoryBean() {
    LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
    localSessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
    localSessionFactoryBean.setPackagesToScan("com.example.yourpackage.model");
    return localSessionFactoryBean;
}

আপনি না থাকে তাহলে hibernate.cfg.xmlআপনার বর্তমান src/test/resourcesফোল্ডারের এটি স্বয়ংক্রিয়ভাবে আপনার এক ফিরে আসবে src/main/resourcesফোল্ডার।


0

আপনার ফাইল অবজেক্টে .getAbsolvePath () ব্যবহার করুন।

getClass().getResource("somefile").getFile().getAbsolutePath()

getFile ফেরত স্ট্রিং উদাহরণটি FIle নয়
আলমাস

@ আলমাসআবড্রাজাক গ্রেটড্যানটোন এটি বলে না যে getFile()ফাইলের কোনও উদাহরণ ফেরত দেয়। তিনি বলেন যে getAbsolutePath()এটি ফাইল অবজেক্টের উদাহরণে ব্যবহৃত হয়।
মেনটাইথ

@ এ্যামেথিথ তার কোড অনুসারে, তিনি getFile () এবং তারপরে getFile () তে getAbsolvePath () কল করেন তবে getFile () স্ট্রিং ফিরিয়ে দেয় এবং আপনি স্ট্রিং অবজেক্টে getAbsolvePath () কল করতে পারবেন না
আলমাস আব্দ্রজাক

0

স্প্রিংয়ের সাথে আপনি সহজেই এটি রিসোর্স ফোল্ডার থেকে পড়তে পারেন (হয় প্রধান / সংস্থান বা পরীক্ষা / সংস্থান):

উদাহরণস্বরূপ একটি ফাইল তৈরি করুন: test/resources/subfolder/sample.json

@Test
public void testReadFile() {
    String json = this.readFile("classpath:subfolder/sample.json");
    System.out.println(json);
}

public String readFile(String path) {
    try {
        File file = ResourceUtils.getFile(path);
        return new String(Files.readAllBytes(file.toPath()));
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

0
List<String> lines = Files.readAllLines(Paths.get("src/test/resources/foo.txt"));
lines.forEach(System.out::println);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.