অ্যান্ড্রয়েডে অস্থায়ী ফাইল তৈরি করা হচ্ছে


204

অ্যান্ড্রয়েডে অস্থায়ী ফাইল তৈরির সবচেয়ে ভাল উপায় কী?

পারি File.createTempFile ব্যবহার করা যেতে? ডকুমেন্টেশন এটি সম্পর্কে খুব অস্পষ্ট।

বিশেষত, কখনই File.createTempFileযদি তৈরি করা অস্থায়ী ফাইলগুলি মুছে ফেলা হয় তা পরিষ্কার নয় ।


আপনি এই থ্রেডটি স্ট্যাকওভারফ্লোতে শুরু করতে পারেন , যেখানে অস্থায়ী-ফাইলগুলি আলোচনা করা হয়।
বেনি স্কগবার্গ

এই অ্যান্ড্রয়েড বিকাশকারীদের গুগল গ্রুপের আলোচনাটি আগ্রহী হতে পারে: groups.google.com/group/android-developers/browse_thread/thread/…
এইচপিক

উত্তর:


286

আমি সাধারণত এটি করি:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

তাদের মোছার বিষয়ে, আমিও সম্পূর্ণ নিশ্চিত নই। যেহেতু আমি এটি আমার ক্যাশে প্রয়োগের ক্ষেত্রে ব্যবহার করি, তাই ক্যাশে ডিরেক্টরি আকারটি আমার পূর্ব নির্ধারিত মান পর্যন্ত না আসা পর্যন্ত আমি ম্যানুয়ালি পুরানো ফাইলগুলি মুছব।


2
আমিও তাই করি। আমার ধারনা হ'ল ক্রিয়েটেম্পফায়াল প্রকৃত অস্থায়ী ফাইল তৈরি করে না যতক্ষণ না এটি ক্যাশে ডির ব্যবহার করে তবে এটি সত্যই নথিভুক্ত নয়।
এইচপিক

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

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

আমি কি এই ফাইলটি ভাগ করে নিতে ভাগ করে নিতে পারি?
aks

4
আপনি আউটপুটফিল.ডিলিটঅনএক্সিট () কল করতে পারেন। তত্ত্বগতভাবে, আপনার অ্যাপ্লিকেশনটি প্রস্থান করার সময় সিস্টেম এটি পরিষ্কার করবে। ফাইল ক্লাসে স্ট্যান্ডার্ড পদ্ধতি।
ডেভ হাববার্ড

90

অভ্যন্তরীণ এবং বাহ্যিক অস্থায়ী ফাইলগুলিতে সেরা অনুশীলন :

অভ্যন্তরীণ ক্যাশে

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

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

বাহ্যিক ক্যাশে

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

ContextCompat.getExternalFilesDirs()উপরে উল্লিখিত অনুরূপ , আপনি কল করে একটি গৌণ বাহ্যিক সঞ্চয়স্থানে (যদি উপলব্ধ থাকে) একটি ক্যাশে ডিরেক্টরিতেও অ্যাক্সেস করতে পারেন ContextCompat.getExternalCacheDirs()

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


2
এটি বড় অস্থায়ী ফাইলগুলির সাথে কী করবেন সে প্রশ্নের যথাযথ উত্তর দেয় না। এখানে সেরা অনুশীলন কি? আমার সন্দেহ হয় একটি সাধারণ ফাইল পরিচালনা করা ছাড়া আর একটি নেই।
Merk

35

অস্থায়ী অভ্যন্তরীণ ফাইলগুলির জন্য তাদের 2 টি বিকল্প

1।

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2।

File file
file = new File(this.getCacheDir(), filename);

উভয় বিকল্প অ্যাপ্লিকেশন ক্যাশে ডিরেক্টরিতে ফাইল যুক্ত করে এবং প্রয়োজনীয় স্থান হিসাবে এটি পরিষ্কার করা যেতে পারে তবে বিকল্প 1 ফাইলের নামের শেষে একটি এলোমেলো সংখ্যা যুক্ত করবে ফাইলগুলি অনন্য রাখতে। এটি একটি ফাইল এক্সটেনশন যুক্ত করবে যা .tmpডিফল্টরূপে হয় তবে এটি ২ য় পরামিতি ব্যবহারের মাধ্যমে কোনও কিছুতে সেট করা যেতে পারে। এলোমেলো নম্বর ব্যবহারের অর্থ একটি ফাইলের নাম উল্লেখ করেও এটি প্রত্যয় / ফাইল এক্সটেনশন ( .tmpডিফল্টরূপে) এর সাথে নম্বর যুক্ত হওয়ার সাথে একই থাকে না যেমন আপনি নিজের ফাইলের internal_fileনামটি নির্দিষ্ট করেন এবং বেরিয়ে আসেন internal_file1456345.tmp। যেখানে আপনি এক্সটেনশানটি নির্দিষ্ট করতে পারবেন আপনি সংযুক্ত নম্বরটি নির্দিষ্ট করতে পারবেন না। তবে এটির মাধ্যমে উত্পন্ন ফাইলের নামটি আপনি খুঁজে পেতে পারেনfile.getName();, তবে আপনার এটি অন্য কোথাও সঞ্চয় করা দরকার যাতে আপনি যখনই ফাইলটি মুছতে বা পড়তে উদাহরণ হিসাবে চেয়েছিলেন এটি ব্যবহার করতে পারেন। সুতরাং এই কারণে আমি 2 য় বিকল্পটি পছন্দ করি কারণ আপনি যে ফাইল নামটি নির্দিষ্ট করেছেন তা হ'ল ফাইল নামটি তৈরি করা।


2
আমি কি ধরে নিতে পারি যে যখন অ্যাপটির প্রক্রিয়াটি জীবিত থাকবে না তখনই অস্থায়ী ফাইলগুলি মুছে ফেলা হবে?
অ্যান্ড্রয়েড বিকাশকারী 15

2
@ অ্যান্ড্রয়েড ডেভেলপার নং
বার্নাল

@ গুয়েলহেরেমবার্নাল আপনি কীভাবে জানেন? আপনি এটি মুছে ফেলতে দেখেছেন?
অ্যান্ড্রয়েড বিকাশকারী

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

14

আপনি কনটেক্সট.বিটকচেডির () ব্যবহার করে ক্যাশে দির ব্যবহার করতে পারেন ।

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());

10
ফাইল টেম্প = ফাইল.ক্রেটটেম্পফিল ("উপসর্গ", "প্রত্যয়", প্রসঙ্গ .getCacheDir ());
প্যাট্রিক

ধন্যবাদ, আমি এটি করেছি, তবে আমার ফাইলের আকার 0 বি এর সমান, যেখানে সমস্যা আছে, কোনও ধারণা?
ব্যবহারকারী7856586

0

আপনি File.deleteOnExit()পদ্ধতিটি ব্যবহার করতে পারেন

https://developer.android.com/reference/java/io/File.html#deleteOnExit ()

এটি এখানে https://developer.android.com/references/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File) উল্লেখ করা হয়েছে )


7
এটা তোলে জেভিএম অদ্ভুত গন্ধ ব্যবহৃত (এটা প্রায় স্বাভাবিকভাবে বিনষ্ট না করা হয়েছে) কারণে প্রায় কাছাকাছি Android এর উপর অনর্থক
weaknespase

1
যতক্ষণ না কোনও কার্য সম্পাদনের উদ্বেগ থাকে, তাত্ক্ষণিকভাবে ডেটা মুছুন, ফ্রি বা ড্রপ করুন, যখন আপনার আর প্রয়োজন হবে না।
রেডউল্ফ

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