File.separator बनाम FileSystem.getSeparator () बनाम System.getProperty ("file.separator)"?


136

प्लेटफ़ॉर्म-निर्भर "फ़ाइल विभाजक" प्लेटफ़ॉर्म-स्वतंत्र रूप से प्राप्त करने के लिए तीन समान तरीके प्रतीत होते हैं :

हम कैसे तय करते हैं कि कब कौन सा उपयोग करना है?

क्या उनके बीच भी कोई अंतर है?


क्या आपको वास्तव में प्लेटफ़ॉर्म-निर्भर फ़ाइल विभाजक नहीं मिल रहा है? बस एक मंच-स्वतंत्र मनोर में।
स्टेनिबोट

@Steiny, Yea, अपडेट किया गया।
पचेरियर

एक सामान्य जावा प्रश्न में कम से कम 3 या अधिक उत्तर हैं
Stimpson Cat

जवाबों:


142

System.getProperties()System.setProperty(String key, String value)या कमांड लाइन मापदंडों के साथ कॉल द्वारा ओवरराइड किया जा सकता है-Dfile.separator=/

File.separator डिफ़ॉल्ट फाइल सिस्टम के लिए विभाजक मिलता है।

FileSystems.getDefault() आपको डिफ़ॉल्ट फाइल सिस्टम मिलता है।

FileSystem.getSeparator()आपको फाइल सिस्टम के लिए विभाजक चरित्र मिलता है। ध्यान दें कि एक उदाहरण विधि के रूप में आप इसका उपयोग अलग-अलग फाइल सिस्टम को अपने कोड के लिए डिफ़ॉल्ट के अलावा कर सकते हैं, उन मामलों में जहां आपको एक जेवीएम में कई फाइल सिस्टम पर काम करने के लिए अपने कोड की आवश्यकता होती है।


2
कूल = डी बीडब्ल्यूटी क्या आप "कई फाइल सिस्टम का संचालन" कर रहे हैं?
पचेरियर

4
@Pacerier सिद्धांत रूप में, अगर मैंने एक नया फाइलसिस्टम (BringerFS) लिखा, जिसमें ":" का विभाजक चरित्र था और आपके पास 2 विभाजन के साथ एक मशीन थी, NTFS में एक और BringerFS में एक, यह कार्यक्षमता आपको दोनों का उपयोग करने की अनुमति देगा (ग्रहण करते हुए मैंने जावा फाइलसिस्टम प्रदाता भी लिखा है)।
ब्रिंजरहैब

मेरा मतलब है कि व्यावहारिक रूप से यह उपयोगी है, जैसे कि किसी के पास 2 विभाजन एक विंडोज और एक यूनिक्स था, और वह मेरा ऐप (अपने विंडोज विभाजन पर) चला रहा है, क्या वह वर्ग अपने यूनिक्स फ़ाइल सिस्टम को एक्सेस करने में सक्षम है? (मैं वास्तव में इसका परीक्षण नहीं कर सकता क्योंकि मेरे पास एक और
फाइलसिस्टम

1
मुझे संदेह है कि विंडोज पर फाइल सिस्टम के लिए अधिकांश ड्राइवर 'विंडोज-स्टाइल' फाइलसिस्टम एपीआई में अनुवाद करते हैं, ताकि यह ओएस और गैर-पोर्टेबल एप्लिकेशन को काम करने की अनुमति दे। व्यावहारिक उपयोग एक ओएस के लिए होना चाहिए जो विंडोज जैसे एक निश्चित प्रतिमान के बिना अजीब और अद्भुत फाइल सिस्टम का समर्थन करता है।
ब्रिंगरहैसॉ नोव

ओह, और आपके अन्य प्रश्न का उत्तर देने के लिए - आपके पास FileSystemनिपटाए गए प्रत्येक फ़ाइल सिस्टम के लिए एक अलग उदाहरण होगा ।
ब्रिंजरहैब नोव

31

यदि आपका कोड फाइल सिस्टम सीमाओं को पार नहीं करता है, यानी आप सिर्फ एक फाइल सिस्टम के साथ काम कर रहे हैं, तो उपयोग करें java.io.File.separator

जैसा कि समझाया गया है, आपको अपने एफएस के लिए डिफ़ॉल्ट विभाजक मिलेगा। जैसा कि Bringer128 ने समझाया, System.getProperty("file.separator")कमांड लाइन विकल्पों के माध्यम से ओवरराइड किया जा सकता है और जैसा कि सुरक्षित नहीं है java.io.File.separator

पिछले एक, java.nio.file.FileSystems.getDefault().getSeparator();जावा 7 में पेश किया गया था, इसलिए आप इसे अभी के लिए अनदेखा कर सकते हैं यदि आप चाहते हैं कि आपका कोड पुराने जावा संस्करणों में पोर्टेबल हो।

तो, इन विकल्पों में से हर एक लगभग दूसरों के समान है, लेकिन काफी नहीं है। अपनी आवश्यकताओं के अनुरूप एक चुनें।


के java.ioपक्ष में पदावनत किया जाता है java.nio?
पचेरियर

13
@ स्पेसर: नहीं, यह पदावनत नहीं है। java.ioकी तुलना में थोड़ा कम स्तर है java.nio, लेकिन अभी भी बहुत और व्यापक रूप से उपयोगी है। आप यहां अंतर देख सकते हैं: blogs.oracle.com/slc/entry/javanio_vs_javaionioप्रतिस्थापित नहीं करता है io, यह इसे कई तरीकों से बढ़ाता है (और ioहुड के नीचे उपयोग करता है )।
दारियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.