जावा में डायरेक्टरी कैसे बनाएं?


386

मैं निर्देशिका / फ़ोल्डर कैसे बनाऊँ?

एक बार मैंने परीक्षण किया है System.getProperty("user.home");

मुझे एक निर्देशिका (निर्देशिका नाम "नया फ़ोल्डर") बनाना होगा यदि और केवल यदि नया फ़ोल्डर मौजूद नहीं है।


24
कृपया सही उत्तर के अपने चयन की समीक्षा करें। जिगर जोशी द्वारा प्रस्तावित समाधान भ्रामक है। यह समस्या को सही ढंग से संबोधित नहीं करता (मेरी टिप्पणी देखें)। Bozho द्वारा प्रस्तावित (सरल) समाधान ज्यादा बेहतर है।
mwhs

mkdirजावा में उदासीनता है। यदि निर्देशिका आपके लिए मौजूद है, तो कार्यान्वयन जाँच करेगा और यदि मौजूद नहीं है तो ही इसे बनाएँ।
12

जवाबों:


460

~ 7 साल के बाद, मैं इसे बेहतर दृष्टिकोण के लिए अद्यतन करूंगा जो कि Bozho द्वारा सुझाया गया है।

new File("/path/directory").mkdirs();

पदावनत:

File theDir = new File("new folder");

// if the directory does not exist, create it
if (!theDir.exists()) {
    System.out.println("creating directory: " + theDir.getName());
    boolean result = false;

    try{
        theDir.mkdir();
        result = true;
    } 
    catch(SecurityException se){
        //handle it
    }        
    if(result) {    
        System.out.println("DIR created");  
    }
}

240
-1: यह वास्तव में एक निर्देशिका बनाने के लिए एक बहुत बुरी तकनीक है। एफएस तक पहुंच एक समर्पित संसाधन के लिए आरक्षित नहीं है। बीच if(!theDir.exists())और theDir.mkdir()स्थिति बदल किया जा सकता था, साथ ही यह के बीच में बदल सकता है के रूप में नहीं (क्योंकि निर्देशिका बनाने existsलौटने true) है और यह जरूरत है। existsएक निर्देशिका बनाने या नहीं करने के लिए विदर तय करने के लिए विधि के परिणाम का उपयोग कभी नहीं किया जाना चाहिए। बस कॉल करें mkdir, कोई अपवाद नहीं फेंका जाएगा यदि यह पहले से मौजूद है।
mwhs

4
@ मैं समझता हूँ कि निर्देशिका के लिए जाँच न करना बेहतर है लेकिन मैं आपके औचित्य (दूसरा भाग) को नहीं समझता। क्या कॉलिंग mkdirऔर डायरेक्टरी के बीच की स्थिति बदल नहीं सकती ? मुझे लगता है कि आप का मतलब है कि कुछ अन्य प्रक्रिया निर्देशिका को हटा देती है।
12

2
@EpHTMLx निर्देशिकाएँ साझा संसाधन हैं। उपरोक्त समाधान का उपयोग न करें, यह विभिन्न कारणों से गलत है। अस्पष्ट है कि पीओ कैसे सोचा जा सकता है कि यह सही उत्तर है। यदि आप IO संसाधनों के बारे में अभिकथन चाहते हैं, तो आपको ताले का उपयोग करने की आवश्यकता है, न कि बूलियन।
mwhs

44
@ मुझे पता है कि यह पोस्ट कुछ महीने पुरानी है, लेकिन अगर आप mkdirsकार्यान्वयन को देखते हैं, तो स्रोत कोड से, सबसे पहली चीज जो कहा जाता है वह है if (exists()) { return false; }। कार्यान्वयन स्वयं यह देखने के लिए पहले जाँच करता है कि क्या निर्देशिका पहले से मौजूद है इसलिए केवल एक ही चीज़ यह उत्तर गलती पर है, शायद, उस स्थिति 2x की जाँच कर रहा है। नहीं के रूप में बुरा के रूप में आप इसे करने के लिए बाहर कर रहे हैं।
माइकल होगेनसन 20

5
जावा 7 के रूप में, आपको संभवतः Filesबेनोइट ब्लैंचोन द्वारा अधिक हाल के उत्तर में विधियों का उपयोग करना चाहिए । (यह उत्तर जावा 7. से पहले लिखा गया प्रतीत होता है)
ईंट

504
new File("/path/directory").mkdirs();

यहां "निर्देशिका" उस निर्देशिका का नाम है जिसे आप बनाना चाहते हैं / मौजूद हैं।


30
ओपी द्वारा सही के रूप में चयनित एक से बेहतर उत्तर। निर्देशिका के अस्तित्व के लिए जाँच करने से पहले इसे एक प्रसिद्ध विरोधी पैटर्न बनना चाहिए।
mwhs

7
क्या होगा यदि निर्देशिका पहले से मौजूद है? यह ओवरराइटिंग करेगा? या प्रक्रिया को छोड़ दें।
अविनाश राज

3
@AvinashRaj की जांच करें docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdirs ()
Tascalator

1
@ यह दस्तावेज़ से स्पष्ट नहीं है आप विस्तृत कर सकते हैं? साथ ही उत्तर को what if the directory is already exists? It would do overwriting? or skip the process.प्रश्न के उत्तर के साथ पूरक होना चाहिए ।
मर्ग्लम

3
यह स्पष्ट है:Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
ज़ीरस

146

जावा 7 के साथ, आप उपयोग कर सकते हैं Files.createDirectories()

उदाहरण के लिए:

Files.createDirectories(Paths.get("/path/to/directory"));

12
मुझे लगता है कि मूल क्यू एंड ए के समय यह विकल्प मौजूद नहीं था, लेकिन यह उत्तर आगे बढ़ने वाला होना चाहिए, मुझे लगता है।
ईंट

6
यह भी ध्यान रखना अच्छा होगा कि:Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
कीथ ओवाईएस

अंतर को इंगित करने के लिए धन्यवाद btw createDirectory और createDirectories। मुझे यह एक खराब नामकरण पसंद है।
सीनिकेल

(2019) मैंने Files.createDirectory (Paths.get (directory.toString ())) का उपयोग किया; जहाँ निर्देशिका एक फ़ाइल वस्तु है। अपने IOException को पकड़ने के लिए मत भूलना
क्रिप्स

@chrips directory.toPath()तब करना बेहतर है ।
रुस्लान स्टेलमाचेंको

37

आप FileUtils # forceMkdir आज़मा सकते हैं

FileUtils.forceMkdir("/path/directory");

इस पुस्तकालय में बहुत सारे उपयोगी कार्य हैं।


1
शुद्ध mkdirs की तुलना में बहुत बेहतर है: संचालन सफल होता है, जाँच करता है कि क्या ऑपरेशन सफल हुआ है, अगर निर्देशिका (फाइल नहीं!) मौजूद है।
एंड्रे

28

mkdir बनाम mkdirs


यदि आप एकल निर्देशिका उपयोग बनाना चाहते हैं mkdir

new File("/path/directory").mkdir();

यदि आप फ़ोल्डर संरचना उपयोग का पदानुक्रम बनाना चाहते हैं mkdirs

 new File("/path/directory").mkdirs();

21
  1. एकल निर्देशिका बनाएँ।

    new File("C:\\Directory1").mkdir();
  2. एक निर्देशिका बनाएँ जिसका नाम है “Directory2 और उसके सभी उप-निर्देशिकाएँ” Sub2 Directory और “Sub-Sub2। एक साथ।

    new File("C:\\Directory2\\Sub2\\Sub-Sub2").mkdirs()

स्रोत: यह आदर्श ट्यूटोरियल , आपको उपयोग का एक उदाहरण भी मिलता है।


14

जावा 7 और उसके बाद के लिए:

Path path = Paths.get("/your/path/string");
Files.createDirectories(path);

यह बनाने से पहले dir या फ़ाइल के अस्तित्व की जाँच करने के लिए अनावश्यक लगता है, createDirectories javadocs से :

पहले कोई भी मूल माता-पिता निर्देशिका बनाकर एक निर्देशिका बनाता है। CreateDirectory विधि के विपरीत, यदि निर्देशिका पहले से मौजूद नहीं है, तो अपवाद नहीं बनाया जा सकता क्योंकि यह मौजूद नहीं है। अट्रैस पैरामीटर वैकल्पिक फाइल-एट्रिब्यूट्स हैं, जो एटोमैटिकली डायरेक्टरी बनाते समय एटोमिकली सेट होते हैं। प्रत्येक फ़ाइल विशेषता को उसके नाम से पहचाना जाता है। यदि एक ही नाम की एक से अधिक विशेषताओं को सरणी में शामिल किया जाता है, तो अंतिम घटना को नजरअंदाज कर दिया जाता है।

यदि यह विधि विफल हो जाती है, तो यह ऐसा कुछ बनाने के बाद हो सकता है, लेकिन सभी नहीं, मूल निर्देशिका के।


7

निम्नलिखित विधि आपको जो चाहिए वह करना चाहिए, बस सुनिश्चित करें कि आप mkdir () / mkdirs () का रिटर्न मान चेक कर रहे हैं

private void createUserDir(final String dirName) throws IOException {
    final File homeDir = new File(System.getProperty("user.home"));
    final File dir = new File(homeDir, dirName);
    if (!dir.exists() && !dir.mkdirs()) {
        throw new IOException("Unable to create " + dir.getAbsolutePath();
    }
}

2
जैसा कि जिगर जोशी के जवाब पर @mwhs द्वारा टिप्पणी में उल्लेख किया गया है, पहले अस्तित्व की जाँच करना न केवल आवश्यक है बल्कि वास्तव में एक बुरा विचार है।
Bdoserror

4

हालांकि इस सवाल का जवाब मिल गया है। मैं कुछ अतिरिक्त लगाना चाहूंगा, यानी यदि निर्देशिका नाम के साथ कोई फ़ाइल मौजूद है जिसे आप बनाने की कोशिश कर रहे हैं तो उसे त्रुटि का संकेत देना चाहिए। भविष्य के आगंतुकों के लिए।

public static void makeDir()
{
    File directory = new File(" dirname ");
    if (directory.exists() && directory.isFile())
    {
        System.out.println("The dir with name could not be" +
        " created as it is a normal file");
    }
    else
    {
        try
        {
            if (!directory.exists())
            {
                directory.mkdir();
            }
            String username = System.getProperty("user.name");
            String filename = " path/" + username + ".txt"; //extension if you need one

        }
        catch (IOException e)
        {
            System.out.println("prompt for error");
        }
    }
}

3
जैसा कि जिगर जोशी के जवाब पर @mwhs द्वारा टिप्पणी में उल्लेख किया गया है, पहले अस्तित्व की जाँच करना न केवल आवश्यक है बल्कि वास्तव में एक बुरा विचार है।
२०:०५ पर Bdoserror

4

साफ़ सुथरा:

import java.io.File;

public class RevCreateDirectory {

    public void revCreateDirectory() {
        //To create single directory/folder
        File file = new File("D:\\Directory1");
        if (!file.exists()) {
            if (file.mkdir()) {
                System.out.println("Directory is created!");
            } else {
                System.out.println("Failed to create directory!");
            }
        }
        //To create multiple directories/folders
        File files = new File("D:\\Directory2\\Sub2\\Sub-Sub2");
        if (!files.exists()) {
            if (files.mkdirs()) {
                System.out.println("Multiple directories are created!");
            } else {
                System.out.println("Failed to create multiple directories!");
            }
        }

    }
}

4

खैर जावा में डायरेक्टरी / फोल्डर बनाने के लिए हमारे पास दो तरीके हैं

यहाँ makedirectory पद्धति एकल निर्देशिका बनाती है यदि यह मौजूद नहीं है।

File dir = new File("path name");
boolean isCreated = dir.mkdir();

तथा

File dir = new File("path name");
boolean isCreated = dir.mkdirs();

यहां makedirectories विधि उन सभी निर्देशिकाओं का निर्माण करेगी जो पथ में गायब हैं जो फ़ाइल ऑब्जेक्ट का प्रतिनिधित्व करते हैं।

उदाहरण के लिए नीचे लिंक देखें (बहुत अच्छी तरह से समझाया गया है)। आशा है ये मदद करेगा!! https://www.flowerbrackets.com/create-directory-java-program/


3

बस कॉल करने वाले सभी को इंगित करना चाहते थे File.mkdir()या File.mkdirs()सावधान रहना चाहिए कि Fileऑब्जेक्ट एक निर्देशिका है और एक फ़ाइल नहीं है। उदाहरण के लिए यदि आप mkdirs()पथ के लिए कॉल करते हैं /dir1/dir2/file.txt, तो यह नाम के साथ एक फ़ोल्डर बनाएगा file.txtजो संभवतः वह नहीं है जो आप चाहते थे। यदि आप एक नई फ़ाइल बना रहे हैं और अपने आप मूल माता-पिता बनाना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं:

            File file = new File(filePath);
            if (file.getParentFile() != null) {
                file.getParentFile().mkdirs();
            }

2

इस तरह मेरे लिए काम एक ही निर्देशिका या अधिक या उन्हें: java.io.File आयात करने की आवश्यकता है;
/ * एक डाइरेक्ट्री dir1 जोड़ने के लिए नीचे दिए गए कोड को दर्ज करें या यदि dir1 मौजूद है, तो नहीं की जाँच करें, इसलिए इसे बनाएं और dir2 और dir3 * के साथ भी ऐसा ही करें।

    File filed = new File("C:\\dir1");
    if(!filed.exists()){  if(filed.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist");  }

    File filel = new File("C:\\dir1\\dir2");
    if(!filel.exists()){  if(filel.mkdir()){ System.out.println("directory is created");   }} else{ System.out.println("directory exist");  }

    File filet = new File("C:\\dir1\\dir2\\dir3");
    if(!filet.exists()){  if(filet.mkdir()){ System.out.println("directory is  created"); }}  else{ System.out.println("directory exist");  }

0

यह फ़ंक्शन आपको उपयोगकर्ता होम निर्देशिका पर एक निर्देशिका बनाने की अनुमति देता है।

private static void createDirectory(final String directoryName) {
    final File homeDirectory = new File(System.getProperty("user.home"));
    final File newDirectory = new File(homeDirectory, directoryName);
    if(!newDirectory.exists()) {
        boolean result = newDirectory.mkdir();

        if(result) {
            System.out.println("The directory is created !");
        }
    } else {
        System.out.println("The directory already exist");
    }
}

जैसा कि जिगर जोशी के जवाब पर @mwhs द्वारा टिप्पणी में उल्लेख किया गया है, पहले अस्तित्व की जाँच करना न केवल आवश्यक है बल्कि वास्तव में एक बुरा विचार है।
Bdoserror

0

यदि आप सुनिश्चित हैं कि यह बनाया जाना चाहते हैं तो:

final String path = "target/logs/";
final File logsDir = new File(path);
final boolean logsDirCreated = logsDir.mkdir();
if (!logsDirCreated) {
    final boolean logsDirExists = logsDir.exists();
    assertThat(logsDirExists).isTrue();
}

परिणाम में mkDir()एक बूलियन देता है, और अगर आप चर का उपयोग न FindBugs इसके लिए रोना होगा। इसके अलावा यह अच्छा नहीं है ...

mkDir()अगर mkDir()यह बनाता है तो ही सही है। यदि डीआईआर मौजूद है, तो यह गलत है, इसलिए आपके द्वारा बनाए गए डीआईआर को सत्यापित करने के लिए, केवल कॉल करें exists()यदि mkDir()रिटर्न गलत है।

assertThat()परिणाम की जाँच करेगा और यदि exists()गलत है तो विफल हो जाता है। inc आप अनुपचारित निर्देशिका को संभालने के लिए अन्य चीजों का उपयोग कर सकते हैं।


-2
public class Test1 {
    public static void main(String[] args)
    {
       String path = System.getProperty("user.home");
       File dir=new File(path+"/new folder");
       if(dir.exists()){
           System.out.println("A folder with name 'new folder' is already exist in the path "+path);
       }else{
           dir.mkdir();
       }

    }
}

जैसा कि जिगर जोशी के जवाब पर @mwhs द्वारा टिप्पणी में उल्लेख किया गया है, पहले अस्तित्व की जाँच करना न केवल आवश्यक है बल्कि वास्तव में एक बुरा विचार है।
२०:०५ पर Bdoserror

-7

आप एक फ़ोल्डर में एक नई निर्देशिका बनाने के लिए makdir () फ़ंक्शन का भी उल्लेख कर सकते हैं।


9
नाम की कोई विधि नहीं है makdir। यदि आपका मतलब है mkdir, यह मौजूदा उत्तरों में कुछ भी कैसे जोड़ता है?
टेड हॉप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.