জাভাতে কীভাবে একটি ডিরেক্টরি তৈরি করবেন?


386

আমি কীভাবে ডিরেক্টরি / ফোল্ডার তৈরি করব?

একবার আমি পরীক্ষা করেছি System.getProperty("user.home");

আমাকে একটি ডিরেক্টরি তৈরি করতে হবে (ডিরেক্টরি নাম "নতুন ফোল্ডার") এবং কেবলমাত্র যদি নতুন ফোল্ডারটি উপস্থিত না থাকে।


24
দয়া করে আপনার সঠিক উত্তরটির নির্বাচনটি পর্যালোচনা করুন। জিগারজোশি প্রস্তাবিত সমাধানটি বিভ্রান্তিকর। এটি সমস্যার সঠিকভাবে সমাধান করে না (আমার মন্তব্য দেখুন)। বোঝো প্রস্তাবিত (সরল) সমাধানটি আরও ভাল।
এমডব্লিউএস

mkdirজাভা আদর্শ। ডিরেক্টরিটি আপনার জন্য ডিরেক্টরি উপস্থিত রয়েছে কিনা তা বাস্তবায়ন চেক করবে এবং এটি উপস্থিত না থাকলে কেবল এটি তৈরি করবে।
এমডব্লিউ

উত্তর:


460

Year 7 বছর পরে, আমি এটি আরও ভাল পদ্ধতির কাছে আপডেট করব যা বোঝো প্রস্তাবিত।

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, ইতিমধ্যে উপস্থিত থাকলে কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হবে না।
এমডব্লিউএস

4
@ এমএইচডাব্লু আমি বুঝতে পারি যে ডিরেক্টরিটি পরীক্ষা না করা ভাল তবে আমি আপনার ন্যায্যতা (দ্বিতীয় অংশ) বুঝতে পারি না। mkdirডিরেক্টরি কল করার পাশাপাশি প্রয়োজনীয় অবস্থারও কি পরিবর্তন করা যায় না ? আমি ধরে নিলাম আপনি বোঝাতে চেয়েছিলেন যে অন্য কোনও প্রক্রিয়া ডিরেক্টরিটি মুছে ফেলে।
এপিসোডেক্স

2
@ এপিসোডেক্স ডিরেক্টরিগুলি ভাগ করা সংস্থানসমূহ। কেবল উপরের সমাধানটি ব্যবহার করবেন না, এটি বিভিন্ন কারণে ভুল। পিও কীভাবে ভাবতে পারত এটি সঠিক উত্তর নয় ar আপনি যদি আইও সংস্থান সম্পর্কে জোর চান তবে আপনার বুলিয়ান নয়, লকগুলি ব্যবহার করা দরকার।
এমডব্লিউএস

44
@ এমএইচইউউজস আমি জানি এই পোস্টটি কয়েক মাস পুরানো তবে আপনি যদি mkdirsবাস্তবায়নটির দিকে তাকান , উত্স কোড থেকে, প্রথমটি বলা হয় if (exists()) { return false; }। ডিরেক্টরিটি ইতিমধ্যে উপস্থিত রয়েছে কিনা তা বাস্তবায়ন নিজেই প্রথমে পরীক্ষা করে দেখেছিল যে এই উত্তরটির জন্য কেবলমাত্র এই উত্তরটি দোষযুক্ত, সম্ভবত, সেই শর্তটি 2x পরীক্ষা করছে। আপনি এটি তৈরি করা হিসাবে খারাপ হিসাবে কাছাকাছি না।
মাইকেল হোগেনসন

5
জাভা 7 হিসাবে, আপনার সম্ভবত Filesবেনোইট ব্লাঞ্চনের সাম্প্রতিক উত্তরের মতো পদ্ধতিগুলি ব্যবহার করা উচিত । (এই উত্তরটি জাভা before এর আগে লেখা হয়েছিল বলে মনে হয়)
ব্রিক

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

আপনি যে ডিরেক্টরিটি তৈরি করতে / বিদ্যমান করতে চান তার নাম এখানে "ডিরেক্টরি"।


30
ওপি কর্তৃক সঠিক হিসাবে নির্বাচিত জনের চেয়ে অনেক বেশি ভাল উত্তর। ডিরেক্টরিটি তৈরি করার আগে ডিরেক্টরিটির অস্তিত্বের জন্য যাচাই করা একটি সুপরিচিত অ্যান্টি-প্যাটার্নে পরিণত হওয়া উচিত।
এমডব্লিউএস

7
ডিরেক্টরি যদি ইতিমধ্যে বিদ্যমান থাকে? এটি ওভাররাইটিং করবে? অথবা প্রক্রিয়াটি এড়িয়ে যান।
অবিনাশ রাজ

3
@ অবিনাশরাজ দয়া করে দস্তাবেজগুলি পরীক্ষা করুন .com
অরাকল.com

1
@ তাসকালেটর ডকুমেন্টেশন থেকে এটি পরিষ্কার নয় আপনি কি বিস্তারিত বলতে পারবেন? এছাড়াও প্রশ্নের উত্তর দিয়ে পরিপূর্ণ করা উচিত what if the directory is already exists? It would do overwriting? or skip the process.
mrgloom

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
কীথ ওওয়াইএস

বিটিডব্লিউ ক্রিয়েট ডিরেক্টরী এবং ক্রিয়েট ডিরেক্টরিতে পার্থক্যটি নির্দেশ করার জন্য ধন্যবাদ। আমি এটি একটি নামকরণের পছন্দ পছন্দ করি না।
seenecle

(2019) আমি ফাইলসক্রিট ডিরেক্টরী (পাথস.জেট (ডিরেক্টরি। টোস্ট্রিং ())) ব্যবহার করেছি; ডিরেক্টরি যেখানে একটি ফাইল অবজেক্ট হয়। আপনার আইওএক্সেপশন ধরতে ভুলে যাবেন না
চিপস

@ chrips এটি করা আরও ভাল directory.toPath()
রুসলান স্টেলমাচেনকো

37

আপনি ফাইল ইউটিলেস # ফোর্স মেকডিয়ার চেষ্টা করতে পারেন

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

এই গ্রন্থাগারটিতে অনেকগুলি কার্যকর কার্য রয়েছে।


1
খাঁটি এমকিডির্সের চেয়ে অনেক বেশি ভাল: একত্রীকরণ পরিচালনা করে, অপারেশনটি সফল হয়েছে কিনা তা পরীক্ষা করে, ডিরেক্টরিটি (ফাইল নয়!) বিদ্যমান কিনা তা পরীক্ষা করে।
অ্যান্ড্রে 11

28

mkdir বনাম mkdirs


আপনি যদি একটি একক ডিরেক্টরি ব্যবহার করতে চান mkdir

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

আপনি যদি ফোল্ডার কাঠামো ব্যবহারের একটি শ্রেণিবিন্যাস তৈরি করতে চান mkdirs

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

21
  1. একটি একক ডিরেক্টরি তৈরি করুন।

    new File("C:\\Directory1").mkdir();
  2. "ডিরেক্টরি 2" নামে একটি ডিরেক্টরি এবং তার সমস্ত উপ ডিরেক্টরি "সাব 2" এবং "উপ-সাব 2" একসাথে তৈরি করুন।

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

উত্স: এই নিখুঁত টিউটোরিয়াল , আপনি ব্যবহারের একটি উদাহরণও খুঁজে পান।


14

জাভা 7 এবং তার জন্য:

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

ক্রিয়েট ডিরেক্টরীজ জাভাদোকস থেকে তৈরি করার আগে ডির বা ফাইলের অস্তিত্ব পরীক্ষা করা অপ্রয়োজনীয় বলে মনে হচ্ছে :

প্রথমে সমস্ত অস্তিত্বহীন পিতামাতার ডিরেক্টরি তৈরি করে একটি ডিরেক্টরি তৈরি করে। ডিরেক্টরিটি তৈরি করার পদ্ধতি থেকে ভিন্ন, ডিরেক্টরিটি তৈরি করা যায়নি কারণ এটি ইতিমধ্যে বিদ্যমান বলে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে না। অ্যাট্রেস প্যারামিটারটি অস্তিত্বহীন ডিরেক্টরিগুলি তৈরি করার সময় পরমাণুভাবে সেট করতে fileচ্ছিক ফাইল-বৈশিষ্ট্য। প্রতিটি ফাইলের বৈশিষ্ট্যটি তার নামে চিহ্নিত করা হয়। যদি একই নামের একাধিক গুণকে অ্যারেতে অন্তর্ভুক্ত করা হয় তবে শেষ ঘটনাটি বাদ দিয়ে সমস্ত উপেক্ষা করা হবে।

যদি এই পদ্ধতিটি ব্যর্থ হয়, তবে এটি প্যারেন্ট ডিরেক্টরিগুলির কিছু তৈরি করার পরেও করতে পারে all


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
জিগার জোশীর জবাব সম্পর্কে @ এমডব্লিউজদের মন্তব্যে যেমন উল্লেখ করা হয়েছে, অস্তিত্বের জন্য প্রথমে পরীক্ষা করা কেবল প্রয়োজনীয় নয়, আসলে এটি একটি খারাপ ধারণাও।
বিডোসারর

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
জিগার জোশীর জবাব সম্পর্কে @ এমডব্লিউজদের মন্তব্যে যেমন উল্লেখ করা হয়েছে, অস্তিত্বের জন্য প্রথমে পরীক্ষা করা কেবল প্রয়োজনীয় নয়, আসলে এটি একটি খারাপ ধারণাও।
বিডোসারর

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

জাভাতে ডিরেক্টরি / ফোল্ডার তৈরি করতে আমাদের দুটি পদ্ধতি রয়েছে

এখানে মেকেরেক্টেরি পদ্ধতিটি উপস্থিত না থাকলে একক ডিরেক্টরি তৈরি করে।

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

এবং

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

এখানে মেকেরেক্টরিও পদ্ধতিগুলি সমস্ত ডিরেক্টরি তৈরি করবে যা ফাইল অবজেক্ট প্রতিনিধিত্ব করে এমন পথে অনুপস্থিত।

উদাহরণস্বরূপ নীচের লিঙ্কটি উল্লেখ করুন (খুব ভালভাবে ব্যাখ্যা করেছেন)। আশা করি এটা সাহায্য করবে!! 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");
    }
}

জিগার জোশীর জবাব সম্পর্কে @ এমডব্লিউজদের মন্তব্যে যেমন উল্লেখ করা হয়েছে, অস্তিত্বের জন্য প্রথমে পরীক্ষা করা কেবল প্রয়োজনীয় নয়, আসলে এটি একটি খারাপ ধারণাও।
বিডোসারর

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();
}

beacuse mkDir()একটি বুলিয়ান ফেরৎ, এবং যদি আপনি ভেরিয়েবল ব্যবহার আত findbugs জন্য কাঁদবে। এছাড়াও এটি সুন্দর না ...

mkDir()যদি mkDir()এটি তৈরি করে তবেই এটি সত্য returns দির যদি বিদ্যমান থাকে তবে এটি মিথ্যা প্রত্যাবর্তন করে, তাই আপনার তৈরি করা ডির যাচাই করতে কেবল মিথ্যা ফেরত exists()হলে কল করুন mkDir()

assertThat()ফলাফলটি যাচাই করে এবং exists()মিথ্যা ফেরত দিলে ব্যর্থ হয় । ofc আপনি অপরিশোধিত ডিরেক্টরি পরিচালনা করতে অন্যান্য জিনিস ব্যবহার করতে পারেন।


-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();
       }

    }
}

জিগার জোশীর জবাব সম্পর্কে @ এমডব্লিউজদের মন্তব্যে যেমন উল্লেখ করা হয়েছে, অস্তিত্বের জন্য প্রথমে পরীক্ষা করা কেবল প্রয়োজনীয় নয়, আসলে এটি একটি খারাপ ধারণাও।
বিডোসারর

-7

আপনি যে ফোল্ডারে চান সেখানে নতুন ডিরেক্টরি তৈরির জন্য আপনি মাকডির () ফাংশনটিও উল্লেখ করতে পারেন।


9
নামকরণের কোনও পদ্ধতি নেই makdir। যদি আপনি বোঝাতে চান mkdir, এটি বিদ্যমান উত্তরের সাথে কীভাবে কিছু যুক্ত করে?
টেড হপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.