কোনও ফোল্ডার বিদ্যমান কিনা তা পরীক্ষা করে দেখুন


199

আমি নতুন জাভা 7 আইও বৈশিষ্ট্যগুলির সাথে কিছুটা খেলছি, আসলে আমি কোনও ফোল্ডারের সমস্ত এক্সএমএল ফাইল পাওয়ার চেষ্টা করছি। কিন্তু ফোল্ডারটি উপস্থিত না থাকায় এটি একটি ব্যতিক্রম ছুঁড়ে দেয়, নতুন আইও সহ ফোল্ডারটি বিদ্যমান কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

public UpdateHandler(String release) {
    log.info("searching for configuration files in folder " + release);
    Path releaseFolder = Paths.get(release);
    try(DirectoryStream<Path> stream = Files.newDirectoryStream(releaseFolder, "*.xml")){

        for (Path entry: stream){
            log.info("working on file " + entry.getFileName());
        }
    }
    catch (IOException e){
        log.error("error while retrieving update configuration files " + e.getMessage());
    }


}

2
আমি ভাবছি কেন আপনি ফোল্ডারটি বিদ্যমান কিনা তা পরীক্ষা করতে চান। আপনি যখন চেক করেছেন তখন ফোল্ডারটি উপস্থিত থাকার অর্থ এই নয় যে আপনি তৈরি করার সময় ফোল্ডারটি উপস্থিত রয়েছে DirectoryStream, আপনি যখন ফোল্ডার এন্ট্রিগুলিতে পুনরাবৃত্তি করেন তখন একা থাকুন।
ওসওয়াল্ড

উত্তর:


262

ব্যবহার java.nio.file.Files:

Path path = ...;

if (Files.exists(path)) {
    // ...
}

আপনি বিকল্প পদ্ধতিতে এই পদ্ধতির LinkOptionমানগুলি পাস করতে পারেন :

if (Files.exists(path, LinkOption.NOFOLLOW_LINKS)) {

একটি পদ্ধতিও রয়েছে notExists:

if (Files.notExists(path)) {

30
এছাড়াও, লক্ষ্য করুন যে উভয় Files.exists(path)এবং Files.notExists(path)একই সাথে মিথ্যা ফিরে আসতে পারে! এর অর্থ জাভাটি নির্ধারণ করতে পারেনি যে পথটি আসলে রয়েছে কিনা।
সংচিত

ও_ও @ সাঁচিত এটি বলার কি আপনার কোন দৃ argument় যুক্তি আছে?
রিচার্ড

6
ডকুমেন্টেশন তাই বলে। :) লিঙ্ক নোটএক্সিস্ট পদ্ধতিটি পরীক্ষা করুন এটি সত্যিই সঠিকভাবে লিঙ্ক করতে পারে না।
সাঁচিত

13
ফাইল.আইসডাইরেক্টরি (পথ, লিংকঅপশন);
কানগাভেলু সুগুমার

2
@ লোমাফা !Files.exists(path)এবং Files.notExists(path)100% একই জিনিস নয়। যখন জাভা কোনও ফাইল বিদ্যমান কিনা তা নির্ধারণ করতে পারে না, প্রথমটি ফিরে আসবে trueএবং দ্বিতীয়টি ফিরে আসবে false
জেস্পার

205

খুবই সাধারণ:

new File("/Path/To/File/or/Directory").exists();

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

File f = new File("/Path/To/File/or/Directory");
if (f.exists() && f.isDirectory()) {
   ...
}

40
সঠিক উত্তর, তবে একটি ছোট্ট বিজ্ঞপ্তি: if(f.isDirectory()) {...}যথেষ্ট হবে, কারণ এটি অস্তিত্বও পরীক্ষা করে।
জি ডেমেকি

3
এটি ওপি-র প্রশ্নের উত্তর দেয় না। java.io.fileওপি "নতুন জাভা 7 আইও বৈশিষ্ট্যগুলির" অংশ নয়। java.nio.fileপ্যাকেজ, যা জাভা 7 চালু হয় উপলব্ধ করা হয় Pathsএবং Filesক্লাস। এখানে অন্যান্য উত্তরগুলি কীভাবে ওপিএস সমস্যা সমাধানের জন্য এই নতুন ক্লাসগুলি ব্যবহার করবেন তা সঠিকভাবে ব্যাখ্যা করে।
ডোরন গোল্ড

53

নতুন আইওয়ের সাথে কোনও ডিরেক্টরি উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে:

if (Files.isDirectory(Paths.get("directory"))) {
  ...
}

isDirectorytrueফাইলটি ডিরেক্টরি হলে ফেরত দেয়; falseযদি ফাইলটি বিদ্যমান না থাকে তবে এটি ডিরেক্টরি নয় বা ফাইলটি ডিরেক্টরি কিনা তা নির্ধারণ করা যায় না।

দেখুন: ডকুমেন্টেশন


6

আপনাকে আপনার পথকে একটিতে রূপান্তর করতে হবে Fileএবং অস্তিত্বের জন্য পরীক্ষা করতে হবে:

for(Path entry: stream){
  if(entry.toFile().exists()){
    log.info("working on file " + entry.getFileName());
  }
}

5

আপনার ফোল্ডার ডিরেক্টরিটির স্ট্রিং থেকে একটি ফাইল তৈরি করুন

String path="Folder directory";    
File file = new File(path);

এবং ব্যবহার পদ্ধতি বিদ্যমান।
আপনি যদি ফোল্ডারটি তৈরি করতে চান তবে আপনি mkdir ব্যবহার করতে পারেন ()

if (!file.exists()) {
            System.out.print("No Folder");
            file.mkdir();
            System.out.print("Folder created");
        }

4

ডিরেক্টরিটি পৃথকভাবে কল করার দরকার নেই exists(), যেমন isDirectory()ডিরেক্টরিটি বিদ্যমান কিনা তা স্পষ্টভাবে যাচাই করে।


4
import java.io.File;
import java.nio.file.Paths;

public class Test
{

  public static void main(String[] args)
  {

    File file = new File("C:\\Temp");
    System.out.println("File Folder Exist" + isFileDirectoryExists(file));
    System.out.println("Directory Exists" + isDirectoryExists("C:\\Temp"));

  }

  public static boolean isFileDirectoryExists(File file)

  {
    if (file.exists())
    {
      return true;
    }
    return false;
  }

  public static boolean isDirectoryExists(String directoryPath)

  {
    if (!Paths.get(directoryPath).toFile().isDirectory())
    {
      return false;
    }
    return true;
  }

}

1
File sourceLoc=new File("/a/b/c/folderName");
boolean isFolderExisted=false;
sourceLoc.exists()==true?sourceLoc.isDirectory()==true?isFolderExisted=true:isFolderExisted=false:isFolderExisted=false;

উত্সলোক.আইসডাইরেক্টরি () রিটার্ন বুলিয়ান ফলাফল। "উত্সলোক.আইসডাইরেক্টরি () == সত্য"
ওলেগ উশাকভ

1

আমরা ফাইলগুলি এবং থায়ার ফোল্ডারগুলি চেক করতে পারি।

import java.io.*;
public class fileCheck
{
    public static void main(String arg[])
    {
        File f = new File("C:/AMD");
        if (f.exists() && f.isDirectory()) {
        System.out.println("Exists");
        //if the file is present then it will show the msg  
        }
        else{
        System.out.println("NOT Exists");
        //if the file is Not present then it will show the msg      
        }
    }
}

দেখে মনে হচ্ছে একটি নেটওয়ার্ক শেয়ার করা ফাইলের সাথে কাজ করে না। ধরা পড়েছে: org.codehaus.groovy.runtime.typehandling.GroovyCastException: অবজেক্ট 'Z: \\ tierWe bServices \ ডিফল্ট। New.txt' ক্লাসের সাথে 'org.codehaus.groovy.runtime.GStringImpl' ক্লাসে 'java.nio .fi le.Path 'org.codehaus.groovy.runtime.typehandling.GroovyCastException: ক্লাসে org.codehaus.groovy.runtime.GStringImpl' শ্রেণিতে অবজেক্ট 'Z: ier tierWebService s \ Deploy \ new.txt' কাস্ট করতে পারবেন না 'java.nio.file.Path'
জিরং হু

0

সোনারলিন্ট থেকে , আপনার যদি ইতিমধ্যে পথ থাকে তবে আরও ভাল পারফরম্যান্সের path.toFile().exists()পরিবর্তে ব্যবহার করুন Files.exists

Files.existsপদ্ধতি JDK 8 লক্ষণীয়ভাবে মন্দ আছে, এবং ফাইল যে আসলে কোন অস্তিত্ব নেই চেক করতে ব্যবহার করা উল্লেখযোগ্যভাবে একটি অ্যাপ্লিকেশন মন্থর পারবেন না।

একই জন্য যায় Files.notExists, Files.isDirectoryএবং Files.isRegularFile

অসম্পূর্ণ কোড উদাহরণ:

Path myPath;
if(java.nio.Files.exists(myPath)) {  // Noncompliant
    // do something
}

সুসংগত সমাধান:

Path myPath;
if(myPath.toFile().exists())) {
    // do something
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.