ডিরেক্টরি উপস্থিত না থাকলে একটি ডিরেক্টরি তৈরি করুন এবং তারপরে সেই ডিরেক্টরিতে ফাইলগুলিও তৈরি করুন


114

শর্তটি যদি ডিরেক্টরি বিদ্যমান থাকে তবে একটি নতুন ডিরেক্টরি তৈরি করে সেই নির্দিষ্ট ডিরেক্টরিতে ফাইল তৈরি করতে হবে।

নীচের কোডটি কেবলমাত্র নতুন ডিরেক্টরি দিয়ে একটি ফাইল তৈরি করে তবে বিদ্যমান ডিরেক্টরিতে নয়। উদাহরণস্বরূপ ডিরেক্টরিটির নাম "GETDIRECTION" এর মতো হবে

String PATH = "/remote/dir/server/";

String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt");  

String directoryName = PATH.append(this.getClassName());   

File file  = new File(String.valueOf(fileName));

File directory = new File(String.valueOf(directoryName));

 if(!directory.exists()){

             directory.mkdir();
            if(!file.exists() && !checkEnoughDiskSpace()){
                file.getParentFile().mkdir();
                file.createNewFile();
            }
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();

উত্তর:


174

এই কোডটি প্রথমে ডিরেক্টরিটির অস্তিত্বের জন্য যাচাই করে এবং এটি না থাকলে এটি তৈরি করে এবং পরে ফাইলটি তৈরি করে। দয়া করে মনে রাখবেন যে আমি আপনার কিছু কোড কল যাচাই করতে পারিনি কারণ আমার কাছে আপনার সম্পূর্ণ কোড নেই, তাই আমি কলগুলি এই জাতীয় জিনিসগুলিতে গ্রহণ করছি getTimeStamp()এবং getClassName()কাজ করবে। আপনার ক্লাসগুলির যে IOExceptionকোনও ব্যবহার করার সময় নিক্ষিপ্ত হওয়া সম্ভব হওয়ার সাথে কিছু করা উচিত java.io.*- হয় ফাইলগুলি লেখার আপনার ফাংশনটি এই ব্যতিক্রম নিক্ষেপ করা উচিত (এবং এটি অন্য কোথাও পরিচালনা করা উচিত), অথবা আপনার সরাসরি পদ্ধতিতে এটি করা উচিত। এছাড়াও, আমি ধরে নিয়েছি যে idএটি টাইপ String- আমি জানি না যেহেতু আপনার কোডটি সুস্পষ্টভাবে এটি সংজ্ঞায়িত করে না। এটি যদি অন্যরকম কিছু হয় তবে ফাইলনামে এটি ব্যবহার intকরার Stringআগে আপনার সম্ভবত এটি কাস্ট করা উচিত I

এছাড়াও, আমি আপনার appendকলগুলি যথাযথ দেখেছি concatবা তার সাথে প্রতিস্থাপন +করেছি।

public void writeFile(String value){
    String PATH = "/remote/dir/server/";
    String directoryName = PATH.concat(this.getClassName());
    String fileName = id + getTimeStamp() + ".txt";

    File directory = new File(directoryName);
    if (! directory.exists()){
        directory.mkdir();
        // If you require it to make the entire directory path including parents,
        // use directory.mkdirs(); here instead.
    }

    File file = new File(directoryName + "/" + fileName);
    try{
        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(value);
        bw.close();
    }
    catch (IOException e){
        e.printStackTrace();
        System.exit(-1);
    }
}

আপনি যদি মাইক্রোসফ্ট উইন্ডোজে কোডটি চালাতে চান তবে আপনার সম্ভবত বেয়ার পাথের নাম ব্যবহার করা উচিত নয় - /এটি ফাইলের নামগুলির সাথে কী করবে তা আমি নিশ্চিত নই । সম্পূর্ণ বহনযোগ্যতার জন্য, আপনার পাথগুলি তৈরি করতে আপনার সম্ভবত ফাইল.সেসপেটর এর মতো কিছু ব্যবহার করা উচিত ।

সম্পাদনা করুন : নীচে জোসেফস্ক্রিপ্টের একটি মন্তব্য অনুসারে , ডিরেক্টরি অস্তিত্বের জন্য এটি পরীক্ষা করার প্রয়োজন নেই। directory.mkdir() কল ফিরে আসবে trueযদি এটি একটি ডিরেক্টরির সৃষ্টি করেছেন এবং falseযদি না তা, কেস যখন নির্দেশিকা ইতিমধ্যেই অস্তিত্ব সহ।


কলগুলি ভাল কাজ করছে। যখন আমি কোডের টুকরো উপরে চেষ্টা করেছি তখনও এটি ফাইল পাঠাচ্ছে PATH তবে ডিরেক্টরিতে নয়। আমি নতুন ফাইল তৈরির জন্য File.seperator ব্যবহার করেছি।
শ্রী

আপনি কী আউটপুট আশা করছেন তা দয়া করে (শ্রেণীর নাম এবং নমুনা ভেরিয়েবল সহ) ব্যাখ্যা করুন। আমি এখানে আমার উদাহরণ প্রোগ্রামটি পুরোপুরি পেস্টবিন.com/3eEg6jQv এ সংযুক্ত করেছি যাতে আপনি দেখতে পাচ্ছেন যে এটি আপনি বর্ণনা করছেন এমনটি করে (যতটা আমি বুঝতে পারি সেরা)।
অ্যারন ডি

4
ফাইল ফাইল = নতুন ফাইল (ডিরেক্টরি নাম + "/" + ফাইলের নাম); আমি উপরের কোড স্নিপেটকে স্ট্রিংবফার ফুলফিলিপথ = নতুন স্ট্রিংবফার (ডিরেক্টরি নাম)। অ্যাপেন্ড (ফাইল.স্যাপারেটর)। অ্যাপেন্ড (ফাইলের নাম) দিয়ে প্রতিস্থাপন করেছি; ফাইল ফাইল = নতুন ফাইল (স্ট্রিং.ভেলিউওফ (ফুলফিলিপথ)); এবং এটি কাজ করেছিল
শ্রী

সেক্ষেত্রে আপনি mkdirs()পদ্ধতিটি ব্যবহার করতে পারেন ।
হারুন ডি

4
আপনাকে কেন ডিরেক্টরিটির অস্তিত্ব পরীক্ষা করতে হবে? আমি এটির সাথে খেলেছি এবং যতদূর আমি দেখতে পাচ্ছি এটি কোনও পার্থক্য বলে মনে হচ্ছে না, যদি আমি একই ডিরেক্টরি দু'বার তৈরি করি। এমনকি থাকা ফাইলগুলি ওভাররাইট করা হবে না। আমি কিছু অনুপস্থিত করছি?
জোসেফস্ক্রিপ্ট 11'17

80

জাভা 8+ সংস্করণ

Files.createDirectories(Paths.get("/Your/Path/Here"));

ফাইলস.ক্রিয়েট ডিরেক্টরি

একটি নতুন ডিরেক্টরি এবং মূল ডিরেক্টরি তৈরি করে যা বিদ্যমান নেই।

ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকলে পদ্ধতিটি একটি ব্যতিক্রম ছুঁড়ে না।


4
এটি সর্বোত্তম উত্তর
সোমশিভাম

অনুমতি তৈরি করার প্রয়োজন হলে কী হয়?
অজয় টাকুর

অ্যান্ড্রয়েডের জন্য এটি কেবল এপিআই ২ 26 এবং আরও উপরে কাজ করে সুতরাং (বিল্ড.ভি.এস.আর.কি.ডি.এন.টি. = বিল্ড.ভেরিশন_কোডেস.ও) বিকাশকারী.অ্যান্ড্রয়েড.
অর্পিত প্যাটেল

24

এটি যতটা সম্ভব সংক্ষিপ্ত এবং সহজ করার চেষ্টা করছি। ডিরেক্টরি উপস্থিত না থাকলে ডিরেক্টরি তৈরি করে এবং তারপরে পছন্দসই ফাইলটি ফেরত দেয়:

/** Creates parent directories if necessary. Then returns file */
private static File fileWithDirectoryAssurance(String directory, String filename) {
    File dir = new File(directory);
    if (!dir.exists()) dir.mkdirs();
    return new File(directory + "/" + filename);
}

9
"/" এর পরিবর্তে File.separatorChar ব্যবহার পছন্দ করুন।
ক্যাকটাসচিবার

23

আমি জাভা 8 + এর জন্য নিম্নলিখিতটি প্রস্তাব করব।

/**
 * Creates a File if the file does not exist, or returns a
 * reference to the File if it already exists.
 */
private File createOrRetrieve(final String target) throws IOException{

    final Path path = Paths.get(target);

    if(Files.notExists(path)){
        LOG.info("Target file \"" + target + "\" will be created.");
        return Files.createFile(Files.createDirectories(path)).toFile();
    }
    LOG.info("Target file \"" + target + "\" will be retrieved.");
    return path.toFile();
}

/**
 * Deletes the target if it exists then creates a new empty file.
 */
private File createOrReplaceFileAndDirectories(final String target) throws IOException{

    final Path path = Paths.get(target);
    // Create only if it does not exist already
    Files.walk(path)
        .filter(p -> Files.exists(p))
        .sorted(Comparator.reverseOrder())
        .peek(p -> LOG.info("Deleted existing file or directory \"" + p + "\"."))
        .forEach(p -> {
            try{
                Files.createFile(Files.createDirectories(p));
            }
            catch(IOException e){
                throw new IllegalStateException(e);
            }
        });

    LOG.info("Target file \"" + target + "\" will be created.");

    return Files.createFile(
        Files.createDirectories(path)
    ).toFile();
}

4
Files.createFile(Files.createDirectories(path)).toFile()হওয়া উচিত Files.createDirectories(path).toFile()জন্য Access Deniedকারণ।
বিপর্যয়

4
@ পাইত্রি, Files.createFile(Files.createDirectories(path))উপরের মন্তব্যে বর্ণিত হিসাবে কাজ করে না। createDirectoriesইতিমধ্যে "test.txt" ফাইলের নামের সাথে একটি ডিরেক্টরি তৈরি করেছে, সুতরাং createFileব্যর্থ হবে।
Marcono1234

7

কোড:

// Create Directory if not exist then Copy a file.


public static void copyFile_Directory(String origin, String destDir, String destination) throws IOException {

    Path FROM = Paths.get(origin);
    Path TO = Paths.get(destination);
    File directory = new File(String.valueOf(destDir));

    if (!directory.exists()) {
        directory.mkdir();
    }
        //overwrite the destination file if it exists, and copy
        // the file attributes, including the rwx permissions
     CopyOption[] options = new CopyOption[]{
                StandardCopyOption.REPLACE_EXISTING,
                StandardCopyOption.COPY_ATTRIBUTES

        };
        Files.copy(FROM, TO, options);


}

5

java.nio.Pathএটি ব্যবহার করা বেশ সহজ হবে -

public static Path createFileWithDir(String directory, String filename) {
        File dir = new File(directory);
        if (!dir.exists()) dir.mkdirs();
        return Paths.get(directory + File.separatorChar + filename);
    }

0

আপনি যদি কোনও ওয়েব ভিত্তিক অ্যাপ্লিকেশন তৈরি করেন তবে ডিরেক্টরিটি উপস্থিত রয়েছে কিনা তা যাচাই করা ভাল সমাধান হ'ল অস্তিত্ব না থাকলে ফাইলটি তৈরি করুন। যদি উপস্থিত থাকে তবে পুনরায় তৈরি করুন।

    private File createFile(String path, String fileName) throws IOException {
       ClassLoader classLoader = getClass().getClassLoader();
       File file = new File(classLoader.getResource(".").getFile() + path + fileName);

       // Lets create the directory
       try {
          file.getParentFile().mkdir();
       } catch (Exception err){
           System.out.println("ERROR (Directory Create)" + err.getMessage());
       }

       // Lets create the file if we have credential
       try {
           file.createNewFile();
       } catch (Exception err){
           System.out.println("ERROR (File Create)" + err.getMessage());
       }
       return  file;
   }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.