Java.io.tmpdir নিয়ন্ত্রণ করতে পরিবেশ পরিবর্তনশীল?


109

আমি TMPপরিবেশের পরিবর্তনশীলগুলি জিনিসগুলি নিয়ন্ত্রণ করতে ব্যবহার করেছি যেখানে জিসিসি এটি অস্থায়ী ফাইলগুলি লেখেন তবে জাভার তৈরিটেম্পফিল এপিআইয়ের জন্য আমি কোনও সমতুল্য খুঁজে পাচ্ছি না ।

এই জাতীয় পরিবেশের পরিবর্তনশীল কি বিদ্যমান?


আসল লিঙ্কটি java.sun.com/javase/6/docs/api/java/io/… , java.lang.String, java.io.File) আমি যখন ইউআরএল রাখি তখন স্ট্যাকওভারফ্লো সঠিক জিনিসটি করে না (বা যখন আমি প্রথম 28% এবং% 29 এর সাথে প্রথম বন্ধনীগুলি প্রতিস্থাপন করব)। আমি জানি সংক্ষিপ্ত ইউআরএল সফলভাবে ব্যবহার করা যায় তবে আমি বুঝতে পেরেছিলাম যে এটি কোনও লিঙ্কের চেয়ে ভাল।
জাচ হিরশ

আমি লিঙ্কটি ঠিক করেছি। তাই ঠিক কাজ ঠিক আছে।
rmeador

1
ধন্যবাদ। আমার ধারণা, কৌতুকটি স্থানগুলিও% 20 এর সাথে প্রতিস্থাপন করেছিল
Zach Hirsch

1
আমি যা করেছি তা হ'ল আপনার লিঙ্কটি অনুসরণ করা, আমার ব্রাউজারের ঠিকানা বারের থেকে ইউআরএল অনুলিপি করা এবং আপনার সংক্ষিপ্ত লিঙ্কটি যেখানে ছিল সেখানে এটি পোস্ট করুন paste
rmeador

উত্তর:


118

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

উপর উইন্ডোজ , OpenJDK এর get_temp_directory()ফাংশন একটি Win32 API কল তোলে GetTempPath(); এইভাবে উইন্ডোজ, জাভা TMPপরিবেশের ভেরিয়েবলের মান প্রতিফলিত করে ।

উপর লিনাক্স এবং সোলারিস , একই get_temp_directory()ফাংশন একটি স্ট্যাটিক মান /tmp/

আমি জানি না আসল জেডিকে 6 এই সঠিক কনভেনশনগুলি অনুসরণ করে কিনা তবে তালিকাভুক্ত প্ল্যাটফর্মগুলির প্রত্যেকটির আচরণের দ্বারা দেখে মনে হয় তারা তা করে।


38
স্পষ্টতই, আপনি যা দেখছেন সেটি হল দেশীয় কোড যা "java.io.tmpdir" সম্পত্তিটির জন্য ডিফল্ট মান সরবরাহ করে যখন JVM সিস্টেম বৈশিষ্ট্য অবজেক্ট তৈরি করে। এটি (উদাহরণস্বরূপ) একটি "-Djava.io.tmpdir = ..." বিকল্প দ্বারা ওভাররাইড হবে।
স্টিফেন সি

6
@ স্টেফেনসি, হ্যাঁ, এটিই মূল বিষয় - ওপি সন্ধান করছিল যে সম্পত্তিটি নিজেরাই সেট করার অভাবে কীভাবে সম্পত্তিটির ডিফল্ট মান সেট হয়ে যায় ( -Djava.io.tmpdirজেভিএম-তে কমান্ড লাইন বিকল্পের মাধ্যমে ), এবং যদি সেই ডিফল্ট মানটি এখানে প্রভাবিত হয় সমস্ত একটি পরিবেশগত মান দ্বারা। হিসাবে মানুষ পরিলক্ষিত হয়েছিল, উইন্ডোজ তে এটি করা হয় দ্বারা প্রভাবিত TMPএনভায়রনমেন্ট ভেরিয়েবল, কিন্তু এটা স্পষ্ট ছিল যদি অন্যান্য অপারেটিং সিস্টেমের জন্য কিছু অজানা পরিবর্তনশীল ছিল। দেখে মনে হচ্ছে সেখানে নেই, অন্তত ওপেনজেডিকে সম্পর্কে আমরা যা জানি তা দেওয়া হয়েছে।
delfuego

5
নিস উত্তর, কিন্তু Windows এ GetTempPath()শুধু দ্বারা প্রভাবিত হয় না TMPএনভায়রনমেন্ট ভেরিয়েবল: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
ড্যান Berindei

আমি দেখেছি যে সোলারিস সান জেডি কে-তে মান /var/tmp/(শীর্ষস্থানীয় স্ল্যাশ সহ) রয়েছে, তার জন্য এখানে বাগ # 4391434 রয়েছে । এবং ম্যাক ওএস এবং লিনাক্সের জন্য এটি/tmp - কী গোলমাল!
dma_k

1
@ জ্নিক oracle-java8-jdk=8u102(লিনাক্স) নিয়ে কাজ করেন
অ্যালেক্স

118

জাভা ডক্স অনুসারেjava.io.File

ডিফল্ট অস্থায়ী-ফাইল ডিরেক্টরি সিস্টেম সম্পত্তি java.io.tmpdir দ্বারা সুনির্দিষ্ট করা হয়। ইউনিক্স সিস্টেমগুলিতে এই সম্পত্তিটির ডিফল্ট মান সাধারণত "/ tmp" বা "/ var / tmp" হয়; মাইক্রোসফ্ট উইন্ডোজ সিস্টেমে এটি সাধারণত "সি: টেম্পে" থাকে। জাভা ভার্চুয়াল মেশিনটি চালু করা হলে এই সিস্টেমের সম্পত্তিটিতে একটি আলাদা মান দেওয়া যেতে পারে, তবে এই সম্পত্তিটিতে অস্থায়ী ডিরেক্টরিতে ব্যবহৃত অস্থায়ী ডিরেক্টরিতে কোনও প্রভাব থাকার গ্যারান্টিযুক্ত এই সম্পত্তিতে প্রোগ্রামেটিক পরিবর্তনগুলি নেই।

java.io.tmpdirসিস্টেমের বৈশিষ্ট্য নির্দিষ্ট করতে, আপনি JVM কে নিম্নরূপভাবে আবেদন করতে পারেন:

java -Djava.io.tmpdir=/path/to/tmpdir

ডিফল্টরূপে এই মানটি TMPউইন্ডোজ সিস্টেমে পরিবেশ পরিবর্তনশীল থেকে আসা উচিত


1
এটি আমার প্রশ্নের উত্তর দেয় না। এমন কোনও পরিবেশের পরিবর্তনশীল যা এটি নিয়ন্ত্রণ করে?
জাচ হিরশ

3
আপনার সম্পাদনা সত্ত্বেও, ব্রায়ান, java.io.tmpdir অবশ্যই ম্যাক বা উবুন্টুতে (টিএমপিডিআইআর এনভায়রনমেন্ট ভেরিয়েবল অনুসরণ করে না 6.০.0-এ পরীক্ষিত)।
delfuego

ও, এবং অন্য সম্পাদনা, এই সমস্ত মন্তব্যকে অযৌক্তিক বলে মনে হচ্ছে।
delfuego

@Zach। উত্তরটি প্ল্যাটফর্ম নির্দিষ্ট।
স্টিফেন সি

12
এটি এত সহজ নয় এবং এই উত্তরটি এখনও ভুল। উইন্ডোজে, java.io.tmpdirউইন্ডোজ এসডিকে ফাংশন GetTempPath( এমএসডিএন.এমক্রিফটিওস / জেনারেল / লিবেরি / আআআ .364992%28VS.85%29.aspx ) ব্যবহার করে সংজ্ঞায়িত করা হয় যা TMP বা TEMP বা USERPROFILE বা উইন্ডোজ ডিরেক্টরিতে প্রতিটির সমাধান করবে যদি প্রত্যেকেই পূর্ববর্তী সংজ্ঞায়িত করা হয় না।
পাসক্ল থিভেন্ট

62

আপনি আপনার _JAVA_OPTIONSপরিবেশ পরিবর্তনশীল সেট করতে পারেন । উদাহরণস্বরূপ ব্যাশে এটি কৌশলটি করবে:

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

আমি এটি আমার ব্যাশ লগইন স্ক্রিপ্টের মধ্যে রেখেছি এবং এটি কৌশলটি মনে হচ্ছে।


3
যদিও এটি লিনাক্স এবং ম্যাকোএসএক্স-এ কাজ করে বলে মনে হচ্ছে, প্রতিটি জাভা লঞ্চে কিছু অতিরিক্ত আউটপুট মুদ্রণের দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া রয়েছে: Picked up _JAVA_OPTIONS:এটি আমাদের বিল্ডিং প্রক্রিয়াটিকে সম্পূর্ণ বিভ্রান্ত করে।
marc.guenther

3
আমি এই উত্তরটি দিয়েছিলাম কারণ এটি ব্যবহারকারীর প্রশ্নের উত্তর দেয় এবং ব্যবহারকারী ওএস নির্দিষ্ট করে না বা অন্য কোনও দিক প্রভাবিত করে এড়াতে চায় না। আমি বিশ্বাস করি এটি সেরা উত্তর হিসাবে সেট করা উচিত
আর ভ্যান টুইস্ক

3
এই পরিবর্তনশীলটি সান জেভিএম-এর সাথে সুনির্দিষ্ট বলে মনে হচ্ছে - IBM J9 JVM এটি সমর্থন করে না; এটি IBM_JAVA_OPTIONS এর পরিবর্তে সমর্থন করে
সেন্ডমোরেইনফো

@ সেন্ডমোরইনফো, এটি আমার জ্ঞানের জন্য সান / ওরাকল এবং ওপেনজেডিকে কাজ করে।
জন সেন্ট জন

1
এই উত্তর অনুসারে পরিবেশের ভেরিয়েবলের মধ্যে পার্থক্য সম্পর্কে, JAVA_TOOL_OPTIONSআরও পোর্টেবল।
এন্ড্লোস স্ক্লাইফ


28

এটি পরিবেশের পরিবর্তনশীল নয়, তবুও আপনাকে অস্থায়ী দিরের উপরে নিয়ন্ত্রণ দেয়:

-Djava.io.tmpdir

প্রাক্তন .:

java -Djava.io.tmpdir=/mytempdir

17

এখানে কী চলছে সে সম্পর্কে পরিষ্কার হয়ে উঠতে:

  • অস্থায়ী ডিরেক্টরি অবস্থান নির্ধারণের প্রস্তাবিত উপায় হ'ল "java.io.tmpdir" নামক সিস্টেম বৈশিষ্ট্য নির্ধারণ, উদাহরণস্বরূপ কমান্ডের বিকল্পটি -Djava.io.tmpdir=/mytempdirদিয়ে java। একটি প্রোগ্রামের মধ্যে থেকে কল System.setProperty("java.io.tmpdir", "/mytempdir)... সম্পত্তিটিকে স্যান্ডবক্স সুরক্ষা সমস্যাগুলি কল করেও পরিবর্তন করা যেতে পারে ।

  • যদি আপনি স্পষ্টভাবে "java.io.tmpdir" বৈশিষ্ট্যটি শুরু করার সময় সেট না করেন, JVM এটিকে প্ল্যাটফর্মের নির্দিষ্ট ডিফল্ট মান হিসাবে শুরু করে। উইন্ডোজের জন্য, ডিফল্টটি একটি Win32 এপিআই পদ্ধতিতে একটি কল দ্বারা প্রাপ্ত হয়। লিনাক্স / সোলারিসের জন্য স্পষ্টতই হার্ড-ওয়্যার্ড ডিফল্ট। অন্যান্য জেভিএমগুলির জন্য এটি অন্যরকম কিছু হতে পারে।

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


2

ইউনিক্স টার্মিনালে নীচের কমান্ডটি ব্যবহার করুন:

java -XshowSettings

এটি সমস্ত জাভা বৈশিষ্ট্য এবং সিস্টেম সেটিংস প্রদর্শন করবে। java.io.tmpdirমান জন্য এই চেহারা ।

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