GetExternFilesDir এবং getExternStorageDirectory () এর মধ্যে পার্থক্য


90

আমি বুঝতে পেরেছি যে এক্সটার্নাল ফাইলগুলি এপিআই 8 এবং তার উপরে ব্যবহার করা উচিত এবং getExternStorageDirectory 7 এবং নীচে হবে। তবে আমি ব্যবহারের মধ্যে কিছুটা বিভ্রান্ত। উদাহরণস্বরূপ আমি যাচাই করতে চেয়েছিলাম যে কোনও ফোল্ডার বিদ্যমান এবং পূর্বে আপনি এর মতো কিছু ব্যবহার করবেন:

File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");

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

উত্তর:


133
getExternalFilesDir()

এটি আপনার এসডি কার্ডের অ্যান্ড্রয়েড / ডেটা / ডেটা / আপনার_প্যাকেজ / এর মধ্যে ফাইল ফোল্ডারের পথে ফেরত দেয় । এটি আপনার অ্যাপ্লিকেশানের জন্য প্রয়োজনীয় ফাইলগুলি সঞ্চয় করতে ব্যবহৃত হয় (যেমন ওয়েব বা ক্যাশে ফাইল থেকে ডাউনলোড করা চিত্র)। অ্যাপ্লিকেশনটি আনইনস্টল হয়ে গেলে এই ফোল্ডারে থাকা কোনও ডেটা খুব বেশি চলে যায়।

getExternalStorageDirectory()

এটি আপনার এসডি কার্ডে রুট পাথ দেয় (যেমন mnt / sdcard / )। আপনি যদি এই পথে ডেটা সংরক্ষণ করেন এবং অ্যাপটি আনইনস্টল করেন তবে সেই ডেটাটি হারাবে না।


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

4
এটি এআইপি 8-তে, তারা উন্নত মিডিয়া স্ক্যানার বৈশিষ্ট্যগুলি প্রবর্তন করে যা সংগীত, ছবি, রিংটোন ইত্যাদির ফোল্ডারগুলি থেকে ডেটা স্ক্যান করতে দেয় Those ডিরেক্টরিগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায় কেবলমাত্র আপনি getExternFilesDir () ব্যবহার করেন । এখন যেহেতু এই বৈশিষ্ট্যটি এপিআই 7-তে উপলব্ধ ছিল না সে কারণেই তারা getExternStorageDirectory () ব্যবহার করার পরামর্শ দিয়েছিল । সরল ...
ওয়াকসলাম

4
ঠিক আছে, কিছু সময় দিন, শীঘ্রই একটি ইউরেক মুহূর্ত
আসবে

4
এটা জানা যে গুরুত্বপূর্ণ getExternalStorageDirectory()নেই অগত্যা এমনকি - সাধারণত - "। পথ আপনার SD কার্ডে" আসতে পরিবর্তে এটি "প্রাথমিক বাহ্যিক স্টোরেজ ডিরেক্টরি" ফিরিয়ে দেয়। দস্তাবেজগুলি ( বিকাশকারী.অ্যান্ড্রয়েড.
com

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

70

প্রথমত, আমাদের অভ্যন্তরীণ স্টোরেজ, বাহ্যিক স্টোরেজ (ওরফে প্রাথমিক বহিরাগত স্টোরেজ) এবং মাধ্যমিক বহিরাগত সঞ্চয়স্থানের মধ্যে পার্থক্য কী তা সম্পর্কে আমাদের বুঝতে হবে?

অভ্যন্তরীণ স্টোরেজ: এমন স্টোরেজ যা ব্যবহারকারীর দ্বারা অ্যাক্সেসযোগ্য নয়, ইনস্টলড অ্যাপ্লিকেশনগুলি (বা তাদের ডিভাইস রুট করে) except উদাহরণ: ডেটা / ডেটা / অ্যাপ_প্যাকেজ নাম

প্রাথমিক বাহ্যিক স্টোরেজ: বিল্ড শেয়ারড স্টোরেজে যা "ইউএসবি তারের সাথে প্লাগ ইন করে এবং হোস্ট কম্পিউটারে ড্রাইভ হিসাবে মাউন্ট করে ব্যবহারকারী দ্বারা অ্যাক্সেসযোগ্য"। উদাহরণ: আমরা যখন Nexus 5 32 জিবি বলি।

গৌণ বাহ্যিক স্টোরেজ: অপসারণযোগ্য সঞ্চয়স্থান। উদাহরণ: এসডি কার্ড।

getExternalFilesDir (String type)

এটি প্রাথমিক বাহ্যিক স্টোরেজে অ্যান্ড্রয়েড / ডেটা / ডেটা / আপনার_প্যাকেজ / ভিতরে ফাইল ফোল্ডারের পথে ফিরে আসে। যা ইনবিল্ট স্টোরেজ।

Environment.getExternalStorageDirectory(type)

এটি গৌণ বাহ্যিক স্টোরেজ ডিরেক্টরিটির পথ ফিরে আসবে


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

4
@ ভিজোরডান দয়া করে File getExternalStoragePublicDirectory (String type)এবং File getFilesDir ()পাশাপাশি লিখুন
আনভি

4
ধন্যবাদ ভিক। এনভায়রনমেন্ট.বেট
এক্সটার্নাল

প্রাথমিক বহিরাগত স্টোরেজ সর্বদাই অন্তর্নির্মিত, যেখানে গৌণ সবসময় অপসারণযোগ্য? আমি ভেবেছিলাম এগুলি স্বতন্ত্র সমস্যা ... কিছু ফোনে অন্তর্নির্মিত "বাহ্যিক" স্টোরেজ নেই, সেক্ষেত্রে প্রাথমিক বাহ্যিক স্টোরেজটি অপসারণযোগ্য এসডি কার্ড হতে পারে।
লার্শ

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

18

! গুরুত্বপূর্ণ আপডেট! কারণ যে কেউ এই প্রশ্ন জুড়ে আসে।

যেহেতু এটি কিছুটা পুরানো প্রশ্ন কেবল কিছু অতিরিক্ত তথ্য সরবরাহ করতে চেয়েছিল। যেহেতু কিটকাট এমনকি অ্যাপ্লিকেশানগুলিতে ডাব্লুআরআইটিআইএসটিআরএনআরএলপিওআরজি অনুমতি রয়েছে কেবলমাত্র অ্যান্ড্রয়েড / ডেটা / ডেটা / আপনার_প্যাকেজ / বাহ্যিক স্টোরেজে লেখার অনুমতি রয়েছে , ওরফে getExternalFilesDir()

আপনি যদি লেখার চেষ্টা getExternalStorageDirectory() + "/somefolder/anotherfolder/"করেন তবে বেশিরভাগ ডিভাইসে একটি সুরক্ষা গ্রহণ পাবেন x


9
দস্তাবেজ অনুসারে, WRITE_EXTERNAL_STORAGE অনুমতি থাকা অ্যাপ্লিকেশনগুলি কেবল তাদের নিজস্ব নয়, অন্য প্যাকেজগুলির বাহ্যিক স্টোরেজে লিখতে পারে। এটি অ্যাপ্লিকেশানগুলির কাছে অনুমতি নেই যা কেবল তাদের নিজস্ব ডিরেক্টরিতে লিখতে পারে: বিকাশকারী.অ্যান্ড্রয়েড .com/references/android/content/… "কিটকেট থেকে শুরু করে, ফেরার পথে পড়তে বা লিখতে কোনও অনুমতি প্রয়োজন নেই; এটি সর্বদা কলিং অ্যাপ্লিকেশনে অ্যাক্সেসযোগ্য ... অন্যান্য প্যাকেজগুলির অন্তর্ভুক্ত পাথগুলিতে অ্যাক্সেস করতে WRITE_EXTERNAL_STORAGE এবং / অথবা READ_EXTERNAL_STORAGE আবশ্যক। "
ওডে

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

7
এটি আপনার উত্তরের ভুল তথ্যের ঠিকানা দেয় না। "যেহেতু কিটকাট এমনকি অ্যাপ্লিকেশানগুলিতে ডব্লিউআরআইটি। দস্তাবেজগুলি অনুযায়ী, এটি ভুল। WRITE_EXTERNAL_STORAGE এর সাথে অ্যাপ্লিকেশনগুলি সমস্ত বাহ্যিক স্টোরেজে লিখতে পারে।
ওদে

4
@ ওহে, আপনি কি এটি পরীক্ষা করেছেন? ডক্স সম্পর্কে আমার বোঝাপড়া এবং কিটক্যাট এবং পরবর্তী ডিভাইসগুলির সাথে আমার অভিজ্ঞতা আপনার চেয়ে আলাদা। (আশা করি আমার কাছে এখন সমস্ত বিবরণ বের করার সময় ছিল। সম্ভবত পরে।) আমার অভিজ্ঞতা হ'ল এসগাল ঠিক আছে। তারপরে ললিপপও রয়েছে যা কিছুটা আলাদা।
লার্শ

4
এই উত্তরটি স্পষ্টতই মিথ্যা, অ্যান্ড্রয়েডের ডকুমেন্টেশন অনুসারে। বিকাশকারী.অ্যান্ড্রয়েড. com/references/android/… দেখুন "এপিআই স্তরের 19 থেকে শুরু করে, getExternFilesDir (স্ট্রিং) এবং getExternCacheDir () দ্বারা ফিরে আপনার অ্যাপ্লিকেশন-নির্দিষ্ট ডিরেক্টরিগুলিতে ফাইলগুলি পড়তে / লিখতে এই অনুমতি প্রয়োজন হয় না।" (দ্রষ্টব্য যে API স্তর 19 = KitKat Note
Ajedi32

7

!! গুরুত্বপূর্ণ !!

Environment.getExternalStorageDirectory()হয় অবচিত এবং কনটেক্সট # getExternalFilesDir (STRING), MediaStore, অথবা ইন্টেন্ট # ACTION_OPEN_DOCUMENT পরিবর্তে ব্যবহার করা উচিত।

এই পদ্ধতিটি এপিআই স্তরের 29-এ অবমুক্ত করা হয়েছিল user যখন কোনও অ্যাপ্লিকেশন বিল্ড। VERSION_CODES.Q লক্ষ্য করে, এই পদ্ধতি থেকে ফিরে আসা পথটি অ্যাপ্লিকেশনগুলিতে সরাসরি অ্যাক্সেসযোগ্য নয়। অ্যাপ্লিকেশনগুলি প্রসঙ্গ # getExternFilesDir (স্ট্রিং), মিডিয়াস্টোর বা ইন্টেন্ট # অ্যাকশন_ওপেন_ডোকামেন্টের মতো বিকল্পগুলিতে স্থানান্তরিত করে ভাগ করা / বাহ্যিক স্টোরেজে সঞ্চিত সামগ্রী অ্যাক্সেস করতে পারে।

https://developer.android.com/references/android/os/En वातावरण.html#getExternStorageDirectory ()

এছাড়াও অ্যান্ড্রয়েড থেকে শুরু করে M এম বিকাশকারীদের রান সময় অনুমতি চাইতে হবে।

ডকুমেন্টেশন আরও বিস্তারিত দেখুন এখানে এবং এই প্রশ্নের

এনভায়রনমেন্ট.জেটএক্সটার্নাল স্টোরেজ ডিরেক্টরী () এপিআই স্তরের 29 জাভাতে অবমূল্যায়ন করা হয়েছে


যদি কেউ স্ট্যাকের ওভারফ্লো লিঙ্কটি খুঁজছেন এবং গুগল ডক্স থেকে কিছু অনুলিপি জমা করা হয়নি তবে এখানে দেখুন stackoverflow.com/questions/57116335/…
রোয়ান বেরি

4
অ্যান্ড্রয়েড ১১-এ শুরু করে অ্যাপ্লিকেশনগুলি বাহ্যিক স্টোরেজে তাদের নিজস্ব অ্যাপ-নির্দিষ্ট ডিরেক্টরি তৈরি করতে পারে না।
ডার্কসিম্ফনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.