জাভাতে টেম্প ফাইল তৈরির নিরাপদ উপায় কী?


102

আমি জাভাতে একটি টেম্প ফাইল তৈরির একটি নিরাপদ উপায় সন্ধান করছি । নিরাপদে, আমি নিম্নলিখিতটি বোঝাতে চাইছি:

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

4
ব্যবহার File f = File.createTempFile(prefix, extension)। এটি টেম্পার ডিয়ারে স্থাপন করা হবে। এবং f.deleteOnExit()এটি দিয়ে প্রস্থান করার সময় স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।
ব্যাকস্ল্যাশ

4
মুছুন অন প্রস্থান ফাইলটি মুছবে না, যদি ভিএম একটি ব্যতিক্রম সহ প্রস্থান করে।
জোহানেস

উত্তর:


136

ব্যবহার File.createTempFile()

File tempFile = File.createTempFile("prefix-", "-suffix");
//File tempFile = File.createTempFile("MyAppName-", ".tmp");
tempFile.deleteOnExit();

টেম্প ডিয়ারে একটি ফাইল তৈরি করবে, যেমন:

উপসর্গ-6340763779352094442-প্রত্যয়


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

4
সুপার! tempFile.delete()এ ছাড়াও কোনও স্বাভাবিক সমস্যা আছে deleteOnExit(যেহেতু আমি প্রস্থান করার আগে টেম্প ফাইলগুলির কর্ণধার ঝুলতে চাই না)?
এসআরবার্টজেমস

4
না, আপনি এটি যেভাবেই করতে পারেন।
স্টিফান

4
@ এসরোবার্টজেমস: কোনও সমস্যা নেই। জিনিসটি হ'ল পূর্বাভাসযোগ্য নাম সহ টেম্পাইলগুলি তৈরি করা সুরক্ষা সমস্যাগুলি চাপিয়ে দেয়। একবার যথাযথ অনুমতি নিয়ে নিরাপদ উপায়ে তৈরি করা গেলে তারা তা করে না।
মার্কাস ডাব্লু মাহলবার্গ

4
আমি এটি নিরাপদ হিসাবে বিবেচনা করব না, তৈরি করা ফাইলটি বিশ্ব-পঠনযোগ্য এবং এটি টিএমপি ডিরেক্টরিতে থাকে যা কোনও ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য হয়।
পিটার গারবার

38

জাভা 7-তে নতুন ফাইল এপিআই "NIO2" রয়েছে যার মধ্যে temnp ফাইল এবং ডিরেক্টরি তৈরির জন্য নতুন পদ্ধতি রয়েছে। দেখা

যেমন

Path tempDir = Files.createTempDirectory("tempfiles");

বা

Path tempFile = Files.createTempFile("tempfiles", ".tmp");

4
আমি এনআইও পছন্দ করি, যার জন্য উপসর্গের দরকার নেই।
ফ্র্যাঙ্কলিন ইউ

0
String tempfilePath = System.getProperty("java.io.tmpdir");
tempfilePath = tempfilePath.concat("filename.extension");

উপসর্গ প্রয়োজন হয় না।

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