File.separator या File.pathSeparator


519

में Fileकक्षा दो तार देखते हैं, separatorऔर pathSeparator

क्या फर्क पड़ता है? मुझे कब एक का उपयोग करना चाहिए?


6
नामकरण थोड़ा भ्रमित करने वाला है, जिस तेजी से कुछ इस तरह की आवश्यकता होती है वह सादा भयानक (सीएफ पर्ल) है। के लिए उदाहरण को देखो pathSeparatorChar और separatorChar । या सरल mnemonics का उपयोग करें: pathSeparator पथ अलग करता है।
माॅर्टिनस

6
दोनों को स्क्रीन पर प्रिंट करने के लिए एक मिनट का समय लेने से आपके प्रश्न का उत्तर मिल जाता ...
जीन-फ्रांकोइस कॉर्बेट

13
जबकि मैं आमतौर पर सहमत होता हूं, बस उन्हें अपने सिस्टम पर प्रिंट करना अन्य ऑपरेटिंग सिस्टम के लिए वेरिएंट दिखाने के लिए नहीं है।
b1nary.atr0phy

जवाबों:


681

अगर आपका मतलब File.separatorऔर है File.pathSeparator:

  • File.pathSeparatorफ़ाइल पथों की सूची में अलग-अलग फ़ाइल पथों को अलग करने के लिए उपयोग किया जाता है। खिड़कियों पर, पैठ पर्यावरण चर पर विचार करें। आप एक ;का उपयोग करने के लिए फ़ाइल पथों को अलग File.pathSeparatorकरेंगे ताकि विंडोज हो ;

  • File.separator/या तो \एक विशिष्ट फ़ाइल के लिए पथ को विभाजित करने के लिए उपयोग किया जाता है। उदाहरण के लिए विंडोज पर यह \या हैC:\Documents\Test


6
जैसे लगता File.separatorहै के File.fileSeparatorबारे में होना चाहिएFile.pathSeparator
एड़ी

1
@ ईडी मैं आपकी बात देखता हूं, लेकिन यह बेमानी हो सकता है क्योंकि क्लास का नाम है File। मुझे लगता है कि फ़ाइल भाग निहित है। लेकिन कौन जानता है कि उन्होंने जावा के साथ बहुत कुछ किया।
user489041

117

जब आप किसी फ़ाइल पथ का निर्माण कर रहे हैं, तो आप विभाजक का उपयोग करें। तो यूनिक्स में विभाजक है /। इसलिए यदि आप यूनिक्स पथ बनाना चाहते हैं तो आप /var/tempइसे इस तरह से करेंगे:

String path = File.separator + "var"+ File.separator + "temp"

pathSeparatorजब आप क्लासपाथ में फ़ाइलों की सूची के साथ काम कर रहे होते हैं , तब आप इसका उपयोग करते हैं। उदाहरण के लिए, यदि आपके ऐप ने जार की एक सूची ली है तो तर्क के रूप में उस सूची को प्रारूपित करने का मानक तरीका है:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

तो दी गई फाइलों की एक सूची है जो आप कुछ इस तरह से करेंगे:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);

5
यदि आप एक * निक्स पथ बना रहे हैं, /var/tempतो इसका उपयोग करना बेकार है File.separatorक्योंकि आपके पास पहले से ही प्लेटफ़ॉर्म-निर्भर कोड है। साथ ही मार्ग को हार्डकोड कर सकता है।
नेपिर

109

java.io.Fileवर्ग में चार स्थिर विभाजक होते हैं। बेहतर समझ के लिए, आइए कुछ कोड की मदद से समझते हैं

  1. विभाजक: मंच निर्भर डिफ़ॉल्ट नाम-विभाजक चरित्र स्ट्रिंग के रूप में। खिड़कियों के लिए, यह '\' है और यूनिक्स के लिए यह '/' है
  2. सेपरेटरचेयर: सेपरेटर के समान लेकिन यह चार है
  3. pathSeparator: पथ-विभाजक के लिए प्लेटफ़ॉर्म आश्रित चर। उदाहरण के लिए PATH या CLASSPATH, 'यूनिक्स सिस्टम और' और 'में': विंडोज सिस्टम में
  4. pathSeparatorChar: pathSeparator के रूप में ही लेकिन यह चार है

ध्यान दें कि ये सभी अंतिम चर और प्रणाली पर निर्भर हैं।

यहाँ इन विभाजक चर को मुद्रित करने के लिए जावा प्रोग्राम है। FileSeparator.java

import java.io.File;

public class FileSeparator {

    public static void main(String[] args) {
        System.out.println("File.separator = "+File.separator);
        System.out.println("File.separatorChar = "+File.separatorChar);
        System.out.println("File.pathSeparator = "+File.pathSeparator);
        System.out.println("File.pathSeparatorChar = "+File.pathSeparatorChar);
    }

}

यूनिक्स प्रणाली पर उपरोक्त कार्यक्रम का आउटपुट:

File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :

विंडोज सिस्टम पर प्रोग्राम का आउटपुट:

File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;

हमारे प्रोग्राम प्लेटफ़ॉर्म को स्वतंत्र बनाने के लिए, हमें इन विभाजकों का उपयोग हमेशा फ़ाइल पथ बनाने या किसी सिस्टम चर जैसे PATH, CLASSPATH को पढ़ने के लिए करना चाहिए।

यहां कोड स्निपेट दिखाया गया है कि विभाजकों का सही उपयोग कैसे करें।

//no platform independence, good for Unix systems
File fileUnsafe = new File("tmp/abc.txt");
//platform independent and safe to use across Unix and Windows
File fileSafe = new File("tmp"+File.separator+"abc.txt");

1
ध्यान दें कि Java में बैकस्लैश कैरेक्टर वास्तव में \\ है, क्योंकि सिंगल बैकस्लैश अन्य विशेष कैरेक्टर शॉर्टहैंड्स के लिए एस्केप कैरेक्टर है, इसलिए बैकस्लैश का उपयोग खुद से बचने के लिए किया जाता है। Stringऔर charउपर्युक्त विधियों द्वारा लौटे ठीक से प्रारूपित बैकस्लैश (यदि Windows पर) वापसी करते।
एरिक

नई फ़ाइल ("tmp / abc.txt"); यह विंडो और लिनक्स के लिए शालीनता से है, लेकिन यह यूनिक्स नई फ़ाइल के लिए शालीनता से नहीं है ("tmp \\ abc.txt"); यह समस्या केवल यूनिक्स है
DEV-Jacol
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.