জাভা প্রকল্পের আপেক্ষিক পথ থেকে ফাইলটি কীভাবে পড়বেন? java.io.File নির্দিষ্ট পথটি খুঁজে পাচ্ছে না


113

আমার 2 টি প্যাকেজ সহ একটি প্রকল্প রয়েছে:

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

প্যাকেজে (২) আমার একটি পাঠ্য ফাইল রয়েছে ListStopWords.txt, প্যাকেজে (1) আমার একটি ক্লাস রয়েছে FileLoadder। এখানে কোড রয়েছে FileLoader:

File file = new File("properties\\files\\ListStopWords.txt");

তবে এই ত্রুটি আছে:

The system cannot find the path specified

আপনি কি এটি সমাধানের সমাধান দিতে পারেন? ধন্যবাদ।


12
আপনার উভয় প্যাকেজ উদাহরণ একই। আপনি কি এটি বলতে না properties.filesজন্য 2?
BalusC

উত্তর:


172

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

ListStopWords.txtআপনার FileLoaderশ্রেণীর মতো একই প্যাকেজের মধ্যে রয়েছে তা ধরে নিই :

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());

বা যদি আপনি শেষ পর্যন্ত পরে থাকেন তবে তা আসলে InputStreamএটির একটি :

InputStream input = getClass().getResourceAsStream("ListStopWords.txt");

এটি অবশ্যই একটি তৈরির চেয়ে বেশি পছন্দ করা হয়েছে new File()কারণ সম্ভবত এটি urlকোনও ডিস্ক ফাইল সিস্টেমের পাথকে উপস্থাপন করতে পারে না তবে এটি ভার্চুয়াল ফাইল সিস্টেমের পথকেও উপস্থাপন করতে পারে (যা ঘটতে পারে যখন ডিস্ক ফাইল সিস্টেমে টেম্পার ফোল্ডারের পরিবর্তে জেআর মেমরিতে প্রসারিত হয়) বা এমনকি এমন কোনও একটি জাতীয় পাথ যা উভয়ই নির্ধারকের দ্বারা সংজ্ঞা অনুসারে নয় File

যদি ফাইলটি -র প্যাকেজটির নাম ইঙ্গিতগুলি হয়- আসলে একটি "ভুল" এক্সটেনশান সহ একটি সম্পূর্ণ যোগ্য বৈশিষ্ট্যযুক্ত ফাইল ( key=valueলাইন রয়েছে), তবে আপনি InputStreamতাত্ক্ষণিক load()পদ্ধতিতে ফিড দিতে পারেন ।

Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));

দ্রষ্টব্য: আপনি যখন অভ্যন্তরীণ staticপ্রসঙ্গ থেকে এটি অ্যাক্সেস করার চেষ্টা করছেন তখন উপরের উদাহরণগুলির পরিবর্তে FileLoader.class(বা যাই হোক না কেন YourClass.class) ব্যবহার করুন getClass()


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

2
ওহ, এটি ClassLoader.class হওয়ার কথা।
টার্বো

4
@ টার্বো: ওপির FileLoaderনিজস্ব কাস্টম ক্লাস। এটি ঠিক সেই শ্রেণীর বলে মনে করা হচ্ছে যেখানে আপনি সংস্থানটি পাওয়ার চেষ্টা করছেন। সুতরাং, তাই NameOfYourCurrentClass.class.getResourceAsStream(...)ClassLoader.classযদি ব্যর্থ হবে ClassLoaderবর্গ একটি ভিন্ন classloader, যা একাধিক classloaders একটি অনুক্রমের (ক জাভা EE ওয়েব অ্যাপ্লিকেশন মত) সঙ্গে একটি "এন্টারপ্রাইজ" অ্যাপ্লিকেশন ঘটতে পারে লোড করা হচ্ছে।
বালুসসি

ওহ বুজছি. আমি বুঝতে পারিনি যে এটি নির্ভরশীল। যে পরিষ্কার করার জন্য ধন্যবাদ!
টার্বো

10
ফাইলটি একই প্যাকেজে না থাকলে কোনও পরামর্শ? আমার দৃষ্টিতে আমি একটি ফাইল খোলার চেষ্টা করছি যা একটি পরীক্ষার প্যাকেজে রয়েছে।
রবিন নিউহাউস

44

আমরা যদি ফাইলটির আপেক্ষিক পথ নির্দিষ্ট করতে চাই তবে নিম্নলিখিত লাইনটি ব্যবহার করা যেতে পারে।

File file = new File("./properties/files/ListStopWords.txt");  

3
আমি জানতে পারি যে কেন পথের মধ্যে 3 টি ছিটকে যায়।
এমএসএনএইডু

ত্রুটি:> স্ট্রিং আক্ষরিকভাবে অবৈধ পালানোর চরিত্র।
ইগোরগানাপলস্কি

এটিকে কীভাবে রূপান্তর করবেন InputStream?
ইগোরগানাপলস্কি 22'16

1
@ আইগরগানাপলস্কিInputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
ক্যামেরন হাডসন

42

আপেক্ষিক পথটি জাভা ব্যবহার করে এটি ব্যবহার করে। অপারেটর.

  • । মানে বর্তমানে চলমান প্রসঙ্গে একই ফোল্ডার।
  • .. মানে বর্তমানে চলমান প্রসঙ্গের মূল ফোল্ডার।

সুতরাং প্রশ্নটি হল আপনি যে পথটি বর্তমানে জাভা খুঁজছেন সেখানে আপনি কীভাবে জানেন?

একটি ছোট পরীক্ষা করুন

   File directory = new File("./");
   System.out.println(directory.getAbsolutePath());

আউটপুট পর্যবেক্ষণ করুন, আপনি বর্তমান ডিরেক্টরিটি জানতে পারবেন যেখানে জাভা খুঁজছেন। সেখান থেকে আপনার ফাইলটি সনাক্ত করতে কেবল ./ অপারেটরটি ব্যবহার করুন।

উদাহরণস্বরূপ যদি আউটপুট হয়

জি: \ JAVA8Ws \ MyProject \ সামগ্রী অন্তর্ভুক্ত রয়েছে।

এবং আপনার ফাইলটি সহজভাবে মাইপ্রজেক্ট ফোল্ডারটিতে উপস্থিত রয়েছে

File resourceFile = new File("../myFile.txt");

আশাকরি এটা সাহায্য করবে


ঘন্টাখানেক অনুসন্ধান করার পরে এই উত্তরটি আমাকে সমাধানটি দিয়েছিল
এরদোস্টমাস

8
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
} catch (Exception e) {
    e.printStackTrace();
}

1
@ ইগোরগানাপলস্কি এর ক্লাসের নাম। আপনি .classকেবল তার শ্রেণীর পুরো নাম সরবরাহ করে আক্ষরিক উল্লেখ করতে পারেন ।
টমাসজ মুলারসিজেক

আমি মনে করি এটি ফাইললোডার হওয়ার ইচ্ছা করে।
jamesdeath123


5

আমি মন্তব্য করতে পারতাম তবে তার জন্য আমার কম রেপ আছে। সম্রাটের উত্তর আমার পক্ষে কাজ করেছিল। নিম্নলিখিত কোডের মাধ্যমে বর্তমান ডিরেক্টরি পথটি দেখতে আরও ভাল।

    File directory = new File("./");
    System.out.println(directory.getAbsolutePath());

আমার প্রকল্পে আমি যে সমস্যার মুখোমুখি হয়েছিলাম তা সংশোধন করার জন্য আমি কেবল এটি ব্যবহার করেছি। বর্তমান ডিরেক্টরিটির পৈতৃক ডিরেক্টরিতে ফিরে যেতে। / ব্যবহার করতে ভুলবেন না।

    ./test/conf/appProperties/keystore 

আমি টমক্যাটের মাধ্যমে আমার কোড চালাচ্ছি এবং সুতরাং বর্তমান ডিরেক্টরিটি প্রকল্প ফোল্ডার নয় - আমি প্রকল্পের মূল সম্পর্কিত আপেক্ষিক পথটি কীভাবে সংজ্ঞায়িত করব? আমি বর্তমানে শক্ত পথটি ব্যবহার করছি: "সি: \\ ব্যবহারকারী \\ ব্যবহারকারী \\ ডেস্কটপ \\ সঞ্চিতাগুলি \\ L1_WebShop \\ dblogs.log";
টিয়াগো রেডেলি

: এই ques খুঁজে বার করো @TiagoRedaelli stackoverflow.com/questions/12843217/...
dezible

4

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

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());

2

আমি src / main // js / Simulator.java এর ভিতরে 'কমান্ড.জসন' পার্স করতে চেয়েছিলাম। তার জন্য আমি এসসিআর ফোল্ডারে জেসন ফাইলটি অনুলিপি করেছিলাম এবং এর মতো পরম পথটি দিয়েছি:

Object obj  = parser.parse(new FileReader("./src/command.json"));

2

এখানে চিত্র বর্ণনা লিখুন

ধরে নিচ্ছি আপনি ক্লাসে resourcesডিরেক্টরি থেকে পড়তে চান FileSystem

String file = "dummy.txt";
var path = Paths.get("src/com/company/fs/resources/", file);
System.out.println(path);

System.out.println(Files.readString(path));

দ্রষ্টব্য: নেতৃত্বের .প্রয়োজন নেই।


1

আমার জন্য সমস্যাটি হ'ল ফাইল অবজেক্টের শ্রেণি পথটি <project folder path> or ./src, সুতরাং File file = new File("./src/xxx.txt");আমার সমস্যার সমাধান করুন


0

স্ট্রিং বেসপথ = নতুন ফাইল ("myFile.txt") get getAbsolvePath (); এই বেসপথটি আপনি আপনার ফাইলের সঠিক পথ হিসাবে ব্যবহার করতে পারেন


-1

আপনি যদি getClass()স্ট্যাটিক পদ্ধতি বা স্ট্যাটিক ব্লক থেকে কল করার চেষ্টা করছেন তবে আপনি নিম্নলিখিত পদ্ধতিতে করতে পারেন।

আপনি getClass()যে Propertiesবস্তুটি লোড করছেন তাতে কল করতে পারেন ।

public static Properties pathProperties = null;

static { 
    pathProperties = new Properties();
    String pathPropertiesFile = "/file.xml;
    InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile);
}

কেবল একটি সমাপ্ত উদ্ধৃতি অনুপস্থিত।
jamesdeath123

-1

যদি পাঠ্য ফাইলটি না পড়ে থাকে তবে আরও ঘনিষ্ঠ পরম পাথটি ব্যবহার করার চেষ্টা করুন (যদি আপনি চান আপনি সম্পূর্ণ পরম পথ ব্যবহার করতে পারেন):

FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt");

ধরে নিন যে পরম পথটি:

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