জাভায় রিসোর্স, ইউআরআই, ইউআরএল, পাথ এবং ফাইলের মধ্যে পার্থক্য কী?


96

আমি এখনই জাভা কোডের একটি অংশটি দেখছি, এবং এটি স্ট্রিং হিসাবে একটি পথ নেয় এবং এর ইউআরএল ব্যবহার করে পায় URL resource = ClassLoader.getSystemClassLoader().getResource(pathAsString);, তারপরে কল করে String path = resource.getPath()এবং শেষ পর্যন্ত কার্যকর করে new File(path);

ওহ, এবং এছাড়াও আছে কল URL url = resource.toURI();এবং String file = resource.getFile()

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

মধ্যে পার্থক্য getFile()এবং getPath()এখানে ব্যাখ্যা করা হয়: url.getFile () এবং getpath () এর মধ্যে পার্থক্য কি? (মজার বিষয় হল তারা উভয়ই স্ট্রিংগুলি ফিরে আসবে বলে মনে হচ্ছে, যা সম্ভবত আমার মনের অবস্থাতে পুরোপুরি যোগ করে ...)

এখন, আমার কাছে যদি একটি লোকেটার থাকে যা একটি জার ফাইলটিতে কোনও শ্রেণি বা প্যাকেজটির উল্লেখ করে, তবে এই দুটি (অর্থাত কোনও ফাইলের স্ট্রিংয়ের পথটি) পৃথক হবে কি?

resource.toString()jar:file:/C:/path/to/my.jar!/com/example/সব পরে (বিস্মৃত চিহ্ন নোট করুন) আপনাকে দিতে হবে ।

জাভাতে ইউআরআই এবং ইউআরএল এর মধ্যে পার্থক্য কি প্রাক্তন স্পেসগুলি এনকোড করে না? সিএফ। ফাইল, ইউআরআই এবং জাভাতে বিরোধী ইউআরএল (এই উত্তরটি দুটি পদগুলির মধ্যে সাধারণ, ধারণাগত পার্থক্যকে মোটামুটি ভালভাবে ব্যাখ্যা করে: ইউআরআই সনাক্ত করে এবং ইউআরএল সনাক্ত করে; )

সবশেষে - এবং সর্বাগ্রে - আমার কেন প্রয়োজন হবে File; একটি সংস্থান কেন URLযথেষ্ট নয়? (এবং কোনও উত্স অবজেক্ট আছে?)

দুঃখিত যদি এই প্রশ্নটি কিছুটা অসংগঠিত হয়; এটি কেবল আমার বিভ্রান্তিকে প্রতিফলিত করে ... :)


5
এবং আপনি Pathএনআইও :) থেকে
ফাইল সিস্টেমটিও

4
@ দয়া করে একবারে একটি করে মাথা ব্যথা করুন। ;)
খ্রিস্টান

4
আপনার প্রশ্নের প্রসঙ্গে ফাইল / ইউআরএল + ইউআরআই সম্পর্কিত নয়। এর মধ্যে একটি ফাইলের নামকরণ এবং পরিচালনা করার একটি মাধ্যম অন্যটি সম্পদ থেকে নাম লেখার এবং পড়ার পদ্ধতি (যা ফাইল হতে পারে)। GetFile এবং getPath পদ্ধতিগুলি কোনও ইউআরএল এর উপাদানগুলির সাথে ডিল করে যা (গুলিয়ে ফেলা) ফাইলের অবজেক্টের মতো নাম দেওয়া হয়েছে। শ্রেণি লোডার সংস্থানগুলি ফাইল হিসাবে উপস্থাপিত হয় না কারণ এগুলির বিভিন্ন উত্স থাকতে পারে (বা জেআর ফাইলগুলিতে বাসা বাঁধে)।

4
আমি নোট করব যে এই কোডটি ইচ্ছাকৃতভাবে কাজ করার সম্ভাবনা নেই। একটি URLহল অস্বচ্ছ - যেমন আপনি দেখাতে এটা jar:file:, অর্থাত্ একটি মধ্যে একটি সম্পদ .jarআর্কাইভ। মস্ত করে একটি মধ্যে Fileখুব দরকারী কিছু ঘটাতে করার সম্ভাবনা কম।
বরিস স্পাইডার

4
আপনার সমস্যার কেন্দ্রস্থল হ'ল সংস্থান এবং পথ শব্দের শব্দের বিভিন্ন অর্থ হতে পারে, প্রসঙ্গের উপর নির্ভর করে।
রায়েডওয়াল্ড

উত্তর:


43

আপডেট করুন 2017-04-12 জেভিআরের উত্তরটি পরীক্ষা করুন কারণ এতে আরও বিস্তৃত এবং সঠিক ব্যাখ্যা রয়েছে!


দয়া করে মনে রাখবেন যে আমি নিজেকে উত্তর দেওয়ার জন্য 100% সক্ষম হিসাবে বিবেচনা করি না, তবে তবুও এখানে কিছু মন্তব্য রয়েছে:

  • File ফাইল সিস্টেমের মাধ্যমে অ্যাক্সেসযোগ্য একটি ফাইল বা ডিরেক্টরি উপস্থাপন করে
  • সংস্থান ডেটা অবজেক্টের জন্য একটি জেনেরিক শব্দ যা অ্যাপ্লিকেশন দ্বারা লোড করা যায়
    • সাধারণত সংস্থানগুলি অ্যাপ্লিকেশন / লাইব্রেরি সহ ফাইলগুলি বিতরণ করা হয় এবং শ্রেণি-লোডিং পদ্ধতির মাধ্যমে লোড করা হয় (যখন তারা শ্রেণী-পথে থাকে)
  • URL#getPathইউআরএল ( protocol://host/path?query) এর পথ অংশে প্রাপ্ত
  • URL#getFile জাভাডোক হিসাবে রিটার্ন path+query

জাভাতে, URIজেনেরিক শনাক্তকারী নিজেই পরিচালনা করার জন্য একটি ডেটা স্ট্রাকচার।

URLঅন্যদিকে সত্যিকার অর্থে একটি রিসোর্স লোকেটার এবং আপনাকে নিবন্ধীকৃতগুলির মাধ্যমে সংস্থানটি পড়ার জন্য বৈশিষ্ট্যগুলি সরবরাহ করে URLStreamHandler

ইউআরএলগুলি ফাইল-সিস্টেম সংস্থানগুলিতে নেতৃত্ব দিতে পারে এবং আপনি প্রতিটি ফাইল সিস্টেম সংস্থার জন্য file://প্রোটোকল (তাই File<-> URLসম্পর্ক) ব্যবহার করে URL তৈরি করতে পারেন ।

এটি যে URL#getFileসম্পর্কিত নয় সে সম্পর্কেও সচেতন হন java.io.File


আমাকে ফাইল অবজেক্টের দরকার কেন; কেন একটি সংস্থান (ইউআরএল) যথেষ্ট নয়?

যথেষ্ট হইছে. কেবলমাত্র যদি আপনি কিছু উপাদানগুলিতে কেবল ফাইলগুলির সাথে কাজ করতে পারে তবে সেই সংস্থানটি পাস করতে চান, আপনাকে Fileএটি থেকে নেওয়া দরকার । তবে সমস্ত রিসোর্স ইউআরএল Fileগুলি এস তে রূপান্তর করা যায় না ।

এবং একটি রিসোর্স অবজেক্ট আছে?

জেআরই দৃষ্টিকোণ থেকে, এটি কেবল একটি শব্দ। কিছু ফ্রেমওয়ার্ক আপনাকে এ জাতীয় ক্লাস সরবরাহ করে (যেমন স্প্রিংয়ের রিসোর্স )।


5
এর রয়েছে java.nio.file.Path, যা মূলত একটি (জাভা 7+) জন্য প্রতিস্থাপন java.io.Fileহিসাবে আধুনিক এপিআই দৃশ্যত দুর্বল জাভা প্রথম দিন চিন্তা আউট হয়।
ntoskrnl

4
সাধারণত, ইউআরএলটির একেবারে প্রয়োজন না হলে আপনার ব্যবহার হ্রাস করা উচিত। কারণটি হ'ল URL এর সমতুল্য এবং হ্যাশকোড পদ্ধতিগুলি একটি আশ্চর্যজনক উপায়ে প্রয়োগ করা হয়েছে: তারা পদ্ধতি কলগুলিতে ব্লক করছে।
কিবিবাইট 15'15

4
@ কিবিবাইট: আমি আশা করব কলটি ব্লক হয়ে যাবে, হ্যাশকোডের একটি অ্যাসিঙ্ক্রোনাস বাস্তবায়ন হবে এবং এখন এটি খুব অস্থির হবে। আমি মনে করি আপনি যা বোঝাতে চেয়েছিলেন তা হল কলগুলি চেষ্টা করবে এবং হোস্টটিকে সমতুল্য কিনা তা খুঁজে বের করার চেষ্টা করবে এবং এটি সম্ভবত ব্লকিং নেটওয়ার্ক কলগুলি করতে পারে।
নিউটোপিয়ান

54

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

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

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

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

"রিসোর্স" কী?

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

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

দুর্ভাগ্যবশত, কারণ "রিসোর্স" একটি দরকারী জেনেরিক শব্দ বাহিরে এই ব্যাখ্যার, এটি অত্যন্ত সুনির্দিষ্ট কিছু (ক্লাস উদাঃ নাম ব্যবহার করা হয় ResourceBundle , UIResource , রিসোর্স ) যে হয় না, এই অর্থে, একটি সম্পদ।

(একটি পথ) একটি সম্পদ প্রতিনিধিত্বমূলক প্রধান ক্লাস আছে java.nio.file.Path , java.io.File , java.net.URI এবং java.net.URL

ফাইল (java.io, 1.0)

ফাইল এবং ডিরেক্টরি পথের নামগুলির একটি বিমূর্ত উপস্থাপনা।

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

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

ইউআরএল (java.net, 1.0)

ক্লাস ইউআরএল একটি ইউনিফর্ম রিসোর্স লোকেটারকে প্রতিনিধিত্ব করে, ওয়ার্ল্ড ওয়াইড ওয়েবে একটি "রিসোর্স" এর পয়েন্টার। একটি উত্স ফাইল বা ডিরেক্টরি হিসাবে সহজ কিছু হতে পারে, বা এটি একটি জটিল জটিল বস্তুর যেমন একটি ডেটাবেস বা অনুসন্ধান ইঞ্জিনের কোয়েরি হিসাবে উল্লেখ হতে পারে।

কোনও সংস্থার ধারণার সাথে মিল রেখে, URL শ্রেণিটি হোস্ট প্ল্যাটফর্মের কোনও ফাইলকে প্রতিনিধিত্ব করে একইভাবে সেই সংস্থানটিকে উপস্থাপন করে: একটি কাঠামোগত স্ট্রিং হিসাবে যে কোনও উত্সকে নির্দেশ করে। ইউআরএলটিতে অতিরিক্তভাবে একটি স্কিম রয়েছে যা কীভাবে সংস্থানটি পৌঁছাতে পারে তার ইঙ্গিত দেয় ("ফাইলের সাথে:" হোস্ট প্ল্যাটফর্মটি জিজ্ঞাসা করুন "), এবং তাই কোনও জারের ভিতরে এইচটিটিপি, এফটিপি, এবং হোয়াট নোটের মাধ্যমে সংস্থানগুলিকে নির্দেশ করার অনুমতি দেয় allows

দুর্ভাগ্যক্রমে, ইউআরএলগুলি "ফাইল" এবং "পাথ" এর ব্যবহার সহ তাদের নিজস্ব বাক্য গঠন এবং পরিভাষা নিয়ে আসে। ইউআরএল কোনও ফাইল-ইউআরএল হলে URL.getFile রেফারেন্সযুক্ত ফাইলের পাথ স্ট্রিংয়ের মতো একটি স্ট্রিং ফিরিয়ে দেবে।

Class.getResource একটি ইউআরএল ফেরত দেয়: এটি ফাইল ফেরত দেওয়ার চেয়ে আরও নমনীয় এবং এটি 1990 এর দশকের গোড়ার দিকে যেমন কল্পনা করেছিল তেমনি সিস্টেমের প্রয়োজনীয়তাও সরবরাহ করেছে।

ইউআরআই (java.net, 1.4)

একটি ইউনিফর্ম রিসোর্স আইডেন্টিফায়ার (ইউআরআই) রেফারেন্স উপস্থাপন করে।

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

জাভাতে, ইউআরএল এবং ইউআরআইয়ের মধ্যে প্রধান পার্থক্যটি হ'ল কোনও ইউআরএল সমাধানযোগ্য হওয়ার প্রত্যাশাকে বহন করে , অ্যাপ্লিকেশনটি কোনও ইনপুট স্ট্রিমের কাছ থেকে চায়; একটি কোনো URI আরো একটি বিমূর্ত thingamajig যে মত চিকিত্সা করা হয় পারে কিছু সমাধানযোগ্য নির্দেশ (এবং সাধারণত আছে), কিন্তু কি এটা মানে এবং কিভাবে পৌঁছানোর এটা প্রসঙ্গ এবং ব্যাখ্যা করার জন্য আরো খোলা থাকে।

পাথ (java.nio.file, 1.7)

কোনও ফাইল সিস্টেম সিস্টেমে কোনও ফাইল সনাক্ত করতে ব্যবহৃত হতে পারে object এটি সাধারণত সিস্টেম নির্ভর ফাইল পাথের প্রতিনিধিত্ব করবে।

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

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

হোস্ট প্ল্যাটফর্মটি "ডিফল্ট ফাইল সিস্টেম" এর মাধ্যমে উপস্থাপিত হয়; আপনি যখন কল করবেন তখন আপনি File.toPathডিফল্ট ফাইল সিস্টেমে একটি পাথ পান।


এখন, আমার কাছে যদি একটি লোকেটার থাকে যা একটি জার ফাইলটিতে কোনও শ্রেণি বা প্যাকেজটির উল্লেখ করে, তবে এই দুটি (অর্থাত কোনও ফাইলের স্ট্রিংয়ের পথটি) পৃথক হবে কি?

অসম্ভব। যদি জার ফাইলটি স্থানীয় ফাইল সিস্টেমে থাকে তবে আপনার কাছে কোনও কোয়েরি উপাদান থাকা উচিত নয়, URL.getPathএবং URL.getFileএকই ফলাফলটি ফিরে আসা উচিত। তবে, আপনার যা প্রয়োজন তা চয়ন করুন: ফাইল-ইউআরএলগুলিতে সাধারণত কোয়েরি উপাদান নাও থাকতে পারে তবে আমি নিশ্চিত যে কোনওভাবে এটি যুক্ত করতে পারি।

শেষ অবধি - এবং সর্বাগ্রে - আমার কাছে কেন ফাইল অবজেক্টের প্রয়োজন; কেন একটি সংস্থান (ইউআরএল) যথেষ্ট নয়?

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

পাথে অ্যাক্সেস থাকলে আপনার ফাইলের দরকার নেই। কিছু পুরানো এপিআই-তে ফাইলের প্রয়োজন হতে পারে।

(এবং কোনও উত্স অবজেক্ট আছে?)

না, নেই। এর মতো অনেকগুলি নাম রয়েছে, তবে সেগুলি অর্থে কোনও সংস্থান নয় ClassLoader.getResource


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

4
@ ক্রিশ্চিয়ান আমার অর্থ "কেবল নাম" ছিল: কোনওভাবেই ফাইলের বিষয়বস্তুর মডেল হয় না; এটি কেবল একটি স্ট্রিংয়ের চারপাশে একটি পাতলা মোড়ক। "বিমূর্ত প্রতিনিধিত্ব" অংশটি API ডক্স থেকে উদ্ধৃত হয়েছে। ;)
জেভিআর

এই উত্তরটি আরও অনেকগুলি উত্সাহ পাওয়ার দাবিদার ... পাঠকদের কাছে এই বিষয়টির জন্য আমার গৃহীত উত্তরটি আপডেট করবে।
পাভেল হোরাল

12

পাভেল হোরালের উত্তরটি দুর্দান্ত

যেমনটি তিনি বলেছিলেন, "ফাইল" শব্দটির URL#getFileবনাম বনামের সম্পূর্ণ ভিন্ন (ব্যবহারিকভাবে সম্পর্কিত নয়) অর্থ রয়েছে java.io.File- এটি বিভ্রান্তির অংশ হতে পারে।

কেবল যোগ করতে:

  • জাভাতে একটি সংস্থান একটি বিমূর্ত ধারণা, পড়া যেতে পারে এমন ডেটার উত্স। কোনও সংস্থার মাধ্যমে কোনও সংস্থার অবস্থান (বা ঠিকানা) জাভাতে উপস্থাপন করা হয় URL

  • একটি উত্স স্থানীয় ফাইল সিস্টেমের একটি নিয়মিত ফাইলের সাথে সামঞ্জস্য করতে পারে (বিশেষত, যখন এটি URLশুরু হয় file://)। তবে একটি সংস্থানটি আরও সাধারণ (এটি কোনও জারে সঞ্চিত কিছু ফাইলও হতে পারে, বা নেটওয়ার্ক থেকে পড়ার জন্য কিছু ডেটা বা মেমরি থেকে বা ...)। এবং এটি আরও সীমাবদ্ধও, কারণ একটি File(একটি নিয়মিত ফাইলের চেয়ে অন্য জিনিস হওয়া ছাড়াও: ডিরেক্টরি, একটি লিঙ্ক) এছাড়াও তৈরি করা যায় এবং এতে লিখিত হয়।

  • জাভাতে মনে রাখবেন কোনও Fileবস্তু সত্যই "একটি ফাইল" উপস্থাপন করে না তবে কোনও ফাইলের অবস্থান (পুরো নাম, পথ সহ)। সুতরাং, কোনও Fileঅবজেক্ট আপনাকে কোনও ফাইল সন্ধান URLকরতে (এবং খুলতে) অনুমতি দেয়, যাতে আপনাকে কোনও সংস্থান অ্যাক্সেস করতে (এবং খুলতে) অনুমতি দেয়। (কোনও Resourceরিসোর্স উপস্থাপনের জন্য জাভাতে কোনও শ্রেণি নেই , তবে কোনও ফাইলের প্রতিনিধিত্ব করার মতো একটিও নেই! আরও একবার: Fileফাইল নয়, এটি কোনও ফাইলের পথ))।


3

আমি তাদের বুঝতে হিসাবে, আপনি নিম্নলিখিত হিসাবে তাদের শ্রেণিবদ্ধ করতে পারেন:

ওয়েব ভিত্তিক: ইউআরআই এবং ইউআরএল।

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

এবং স্থানীয়: রিসোর্স, পাথ এবং ফাইলগুলি

  • রিসোর্স: রিসোর্সগুলি আপনার জারের ভিতরে থাকা ফাইল। এগুলি জার / পাত্রে বাইরে ফাইল লোড করতে ব্যবহৃত হয়।
  • পথ: একটি পাথ মূলত একটি স্ট্রিং। তবে এটি একাধিক স্ট্রিং সংমিশ্রণ করতে, বা একটি স্ট্রিংয়ে ফাইলগুলি যুক্ত করার জন্য কয়েকটি কার্যকর ফাংশন নিয়ে আসে। এটি নিশ্চিত করে যে আপনি যে পথটি নির্মাণ করছেন তা বৈধ কিনা।
  • ফাইল: এটি একটি ডিরেক্টরি বা ফাইলের একটি রেফারেন্স। এটি ফাইল পরিবর্তন করতে, সেগুলি খুলতে ইত্যাদি ব্যবহার করতে ব্যবহৃত হয়

এগুলি যদি এক শ্রেণিতে একীভূত করা সহজ হয় - তবে তারা সত্যই বিভ্রান্তিকর: ডি

আমি আশা করি এটা আপনাকে সাহায্য করবে :)

(আমি স্রেফ ডকুমেন্টেশনটি দেখেছি - ডকস.ওরাকল.কম এ দেখুন)


0

স্থানীয় ফাইল সিস্টেমের মধ্যে একটি ফাইল একটি সত্ত্বার বিমূর্ত প্রতিনিধিত্ব।

একটি পাথ সাধারণত একটি স্ট্রিং যা কোনও ফাইল সিস্টেমের মধ্যে কোনও ফাইলের অবস্থান নির্দেশ করে। এটিতে সাধারণত ফাইলের নাম অন্তর্ভুক্ত থাকে না। সুতরাং সি: \ ডকুমেন্টস \ মাইস্টফ \ স্টাফ.টেক্সট এর "সি: \ ডকুমেন্টস \ মাইস্টফ" এর মান সহ একটি পাথ থাকবে স্পষ্টতই পরম ফাইলনাম এবং পাথের ফর্ম্যাটটি ফাইল সিস্টেম থেকে ফাইল সিস্টেমের মধ্যে প্রচুর পরিবর্তিত হতে পারে।

ইউআরএল ইউআরআই এর একটি সাসবসেট যা সাধারণত HTTP- র মাধ্যমে অ্যাক্সেসযোগ্য সংস্থানগুলিকে উপস্থাপন করে। আমি মনে করি না যে কোনও কিছুতে যখন ইউআরএল বনাম কোনও ইউআরআই হতে হয় সে সম্পর্কে কোনও ধরণের আয়রনক্ল্যাড নিয়ম রয়েছে। ইউআরআইগুলি "প্রোটোকল: // রিসোর্স-আইডেন্টিফায়ার" যেমন বিটকয়েন: // প্যারামস, http://something.com?param=value আকারে স্ট্রিং । ইউআরএল এর মতো শ্রেণিগুলি সাধারণত স্ট্রিং মোড়ানো হয় এবং ইউটিলিটি পদ্ধতি সরবরাহ করে যে স্ট্রিংয়ের সরবরাহের কোনও কারণ নেই।

রিসোর্সের মতো কোনও জিনিস নয়, আপনি যে অর্থে কথা বলছেন তা অন্তত নয়। কেবলমাত্র একটি পদ্ধতির নাম getResource এর অর্থ এই নয় যে এটি রিসোর্স টাইপের কোনও অবজেক্ট প্রদান করে।

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


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