জাভাতে কোনও ফাইল বিদ্যমান আছে কিনা তা আমি কীভাবে পরীক্ষা করব?


841

জাভাতে ( পার্লের সমতুল্য -e $filename) পড়ার জন্য কোনও ফাইল খোলার আগে, আমি কীভাবে এটি পরীক্ষা করতে পারি ?

শুধুমাত্র তাই একই প্রশ্ন ফাইল লেখার এবং এইভাবে ব্যবহার উত্তর দেওয়া হয়েছিল সঙ্গে পুলিশ FileWriterযা স্পষ্টত এখানে প্রযোজ্য নয়।

যদি সম্ভব হয় তবে আমি "একটি ফাইল খোলার জন্য কল এপিআই কল করুন এবং যখন আপনি পাঠ্যে 'কোনও ফাইল নেই' বলে পরীক্ষা করেন, তখন এটি ধরতে সক্ষম হন" এর বিপরীতে সত্যিকারের এপিআই কলটি সত্য / মিথ্যা প্রত্যাখ্যান করতে পছন্দ করি তবে আমি এতে থাকতে পারি পরেরটি।


3
এছাড়াও যোগ করার জন্য আপনি উপযুক্ত ফাইল অনুমতি জন্য চেক করতে চাইবেন চাই: docs.oracle.com/javase/6/docs/api/java/io/File.html java.io.File পদ্ধতি আছে canRead, canWriteএবং canExecuteযে জন্য চেক করতে ।
কির্কল্যান্ড

6
এটি লক্ষণীয় যে এটি বিপজ্জনক। আপনার "এই ফাইলটির উপস্থিতি আছে" পদ্ধতিটি ফেরার ঠিক পরে, ফাইল সিস্টেমটি যে কোনও সময় পরিবর্তন করতে পারে। যেহেতু আপনাকে যেভাবেই কেসটি পরিচালনা করতে হবে, সুতরাং এই জাতীয় পদ্ধতিটি প্রশ্নবিদ্ধ ইউটিলিটি। আপনি যদি ফাইলটি খুলতে যাচ্ছেন, তা করার সঠিক উপায় হ'ল ফাইলটি খুলুন এবং প্রাসঙ্গিক ব্যতিক্রম পরিচালনা করবেন।
কেভিন

1
@ কেভিন ভাল কথা, তবে এটি অবিচ্ছিন্ন পরিবেশে সন্দেহাতীত ইউটিলিটি, যা আমার ক্ষেত্রে এটির প্রয়োজন ছিল;)
ডিভি কে

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

2
@ কেভিন এটি গুরুত্ব দেয় না তবে এটি ব্যক্তিগত ব্যবহারের জন্য ডিজাইন করা একক থ্রেডেড অ্যাপ। এর উত্সর্গীকৃত ফাইলটি কোনওরকমভাবে এর অধীনে থেকে তৈরি / পরিবর্তিত হওয়ার সম্ভাবনাগুলি অবিশ্বাস্যভাবে কম।
ডিভিকে

উত্তর:


1341

ব্যবহার java.io.File:

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}

15
কিছু ক্ষেত্রে রয়েছে যেখানে উপস্থিত রয়েছে () একটি ভুল ফলাফল প্রদান করবে। উদাহরণস্বরূপ, যখন একটি NFS ফাইল সিস্টেম ব্যবহার সেখানে মামুলি ফাইল হ্যান্ডলগুলি সঙ্গে একটি বিষয়: bugs.java.com/bugdatabase/view_bug.do?bug_id=5003595 এটা অস্পষ্ট ধরনের, কিন্তু উৎপাদন কোডে কিছু হতাশাজনক বাগ কারণ হয়েছে আগে.
CAW

22
if(f.isFile())পরিবর্তে ব্যবহার করুন।
লিওন

1
সাদা জায়গা এড়ানোর জন্য ফাইলপ্যাথস্ট্রিং.ট্রিম () ব্যবহার করতে ভুলবেন না
অসীম

426

আমি এর isFile()পরিবর্তে ব্যবহারের পরামর্শ দেব exists()। বেশিরভাগ সময় আপনি অনুসন্ধানের দিকে তাকিয়ে থাকেন যে কোনও ফাইলের দিকে পাথ নির্দেশ করে কিনা তা কেবল এটি বিদ্যমান। মনে রাখবেন যে exists()আপনার পথটি যদি কোনও ডিরেক্টরিতে নির্দেশ করে তবে তা সত্য হবে।

new File("path/to/file.txt").isFile();

new File("C:/").exists() সত্য ফিরে আসবে তবে আপনাকে ফাইল হিসাবে এটি খুলতে এবং পড়তে অনুমতি দেবে না।


1
@ ylun.ca উদাহরণটিতে উপ-ডিরেক্টরি অন্তর্ভুক্ত রয়েছে? যদি আপনার জিজ্ঞাসার অর্থ যদি বোঝানো হয় যে, একটি সম্পূর্ণ ডিরেক্টরি দেওয়া হয়েছে /path, সঠিক পুরো পথটি দিলে new File("file.txt").exists()ফিরে আসবে trueকিনা /path/to/file.txt, উত্তরটি বড় হ'ল (অন্য কোনও ফাইল /path/file.txtউপস্থিত না থাকলে)।
ম্যাথু

149

জাভা এসই 7 এ নিও ব্যবহার করে,

import java.nio.file.*;

Path path = Paths.get(filePathString);

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

if (Files.notExists(path)) {
  // file is not exist
}

উভয় তাহলে existsএবং notExistsরিটার্ন মিথ্যা, ফাইল অস্তিত্ব যাচাই করা যাবে না। (সম্ভবত এই পথে কোনও অ্যাক্সেস নেই)

আপনি pathডিরেক্টরি বা নিয়মিত ফাইল কিনা তা পরীক্ষা করতে পারেন ।

if (Files.isDirectory(path)) {
  // path is directory
}

if (Files.isRegularFile(path)) {
  // path is regular file
}

এই চেক করুন জাভা SE 7 টিউটোরিয়াল


2
নতুন ফাইল (পাথ) .এক্সেস্টিজ () এর সাথে তুলনা করে কী সুবিধা? প্যালিনের জন্য চেক রয়েছে
রঘু কে নায়ার

2
@ রাঘুকনেয়ার java.nio.file.Files.exists()তার চেয়ে অনেক দ্রুত java.io.File.exists()(আমি পরীক্ষিত একমাত্র কম্পিউটারে আমার ছোট মাপদণ্ড থেকে: উইন্ডোজ সার্ভার 2012 জাভা 1.7.0_45 x64 চলছে)।
ম্যাথিউইউ

1
আমি এটা নিজে চেষ্টা এবং java.nio.file.Files.exists()5 বার ছিল ধীর চেয়ে java.io.File.exists। (উইন 7 জাভা 1.7.0_79 - x86)
পার্কারহালো

স্ট্রিংটি বৈধ না হলে পাথস.জেট একটি ব্যতিক্রম ছোঁড়ে এমন অসুবিধাও রয়েছে
রিচার্ড

46

জাভা 8 ব্যবহার করে:

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}

2
Files.exists()দুটি যুক্তি লাগে। সাধারণত, আপনি কিছু চাইবেন Files.exists(path, LinkOption.NOFOLLOW_LINKS )
মাইক সি

1
@ মাইকিসি অবাক করে দিয়েছি যে কোন যুক্তিটি দ্বিতীয় যুক্তি ছাড়াই ডাকা হয়। ডকু এমনকি এ সম্পর্কে কোনও তথ্যও দেখায় না।
পাওয়ারফ্লোয়ার

1
@ পাওয়ারফ্লোয়ার: কেবলমাত্র একটি ফাইল.এক্সেস্ট () পদ্ধতি রয়েছে। দ্বিতীয় তর্কটি পাস না করে এটি এখনও একই পদ্ধতিটিকে কল করে। দ্বিতীয় আর্গুমেন্টটি ভ্যারেজ ভেরিয়েবল এবং 0 বা ততোধিক লিঙ্কঅপশন পাস করতে পারে।
TK8

27
File f = new File(filePathString); 

এটি কোনও শারীরিক ফাইল তৈরি করবে না। শুধু ক্লাস ফাইলের একটি অবজেক্ট তৈরি করবে। শারীরিকভাবে একটি ফাইল তৈরি করতে আপনাকে এটিকে স্পষ্টভাবে তৈরি করতে হবে:

f.createNewFile();

সুতরাং এই f.exists()জাতীয় ফাইল উপস্থিত রয়েছে কিনা তা যাচাই করতে ব্যবহার করা যেতে পারে।



16

এটি অর্জনের একাধিক উপায় রয়েছে।

  1. শুধু অস্তিত্বের ক্ষেত্রে। এটি ফাইল বা ডিরেক্টরি হতে পারে।

    new File("/path/to/file").exists();
  2. ফাইল পরীক্ষা করুন

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
  3. ডিরেক্টরি পরীক্ষা করুন।

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isDirectory()) {}
  4. জাভা 7 উপায়।

    Path path = Paths.get("/path/to/file");
    Files.exists(path)  // Existence 
    Files.isDirectory(path)  // is Directory
    Files.isRegularFile(path)  // Regular file 
    Files.isSymbolicLink(path)  // Symbolic Link


14

গুগলে "জাভা ফাইল বিদ্যমান" এর জন্য প্রথম হিট:

import java.io.*;

public class FileTest {
    public static void main(String args[]) {
        File f = new File(args[0]);
        System.out.println(f + (f.exists()? " is found " : " is missing "));
    }
}

1
F.exists পরীক্ষা করার আগে f! = নাল কিনা তা পরীক্ষা করার দরকার নেই, নতুন কীওয়ার্ড ব্যর্থ হলে এটি একটি ব্যতিক্রম উত্পন্ন করবে।
শন এও হার্নি

চ! চূড়ান্ত কিনা পরীক্ষা নেই! চ + + (...) java.io.File.toString ব্যবহার
শুধু কারো

@ আসলটি ঠিক করুন, এটি ব্যবহার করে String.valueOf(), যা
নালগুলি

12

না। FileNotFoundException.কেবল ফাইল ফাইলটি ধরুন ফাইলটি যেভাবেই ফাইল বিদ্যমান আছে কিনা তা পরীক্ষা করে দেখতে হয়। দু'বারের মতো সমস্ত কিছু করার কোনও অর্থ নেই এবং না করার কয়েকটি কারণ যেমন:

  • দ্বিগুণ কোড
  • টাইমিং উইন্ডো সমস্যা যার মাধ্যমে আপনি যখন পরীক্ষা করেন তখন ফাইলটি উপস্থিত থাকতে পারে তবে আপনি যখন খোলেন, বা বিপরীতভাবে এবং
  • এই প্রশ্নের অস্তিত্ব যেমন দেখায়, আপনি ভুল পরীক্ষা করতে পারেন এবং ভুল উত্তর পেতে পারেন।

সিস্টেমটি দ্বিতীয়-অনুমান করার চেষ্টা করবেন না। এটা জানে। এবং ভবিষ্যত ভবিষ্যদ্বাণী করার চেষ্টা করবেন না। সাধারণভাবে কোনও সংস্থান পাওয়া যায় কিনা তা পরীক্ষা করার সর্বোত্তম উপায় কেবল এটি ব্যবহারের চেষ্টা করা।


যদি আমি সরাসরি প্রতি ঘন্টা কোনও ফাইল জমা দেওয়া হয়েছে কিনা তা দেখার জন্য প্রতি ঘন্টা পরীক্ষা করতে চাইলে কী হয়। আমার একটি ওয়েবমেথডস প্রকল্প রয়েছে যা একটি নির্দিষ্ট ড্রাইভে একটি নির্দিষ্ট ফাইল আপলোড করা হয়েছে কিনা তা পরীক্ষা করে দেখতে হবে। কিভাবে এই কাজ করা হবে. বলি যে ফাইলটি আছে কিনা তা আমি প্রতি ঘন্টা পরীক্ষা করতে চাই। আমি জাভা ব্যবহার করতে পারি একটি ক্লাস লিখতে যা সম্ভবত এটি কোনও ধরণের টাইমার সহ করে।
ডগ হাউফ

2
একটি ব্যতিক্রম ধরা আরও বেশি ব্যয়বহুল। আমার পরীক্ষায়, নতুন ফাইল () উপস্থিত রয়েছে () উপস্থিত রয়েছে () ফাইলনটফাউন্ডএক্সেপশন ধরার চেয়ে 10 গুণ বেশি দ্রুত ছিল। সুতরাং, আপনার যদি এমন একটি দৃশ্য থাকে যেখানে সাধারণত ফাইলগুলি অনুপস্থিত (যেমন ডিস্ক ক্যাশে) প্রত্যাশিত থাকে তবে ব্যতিক্রমটি ভুল। এছাড়াও, দ্বিতীয় অনুমান করা সিস্টেমটি দুর্দান্ত।
নিক ফ্রোলভ

1
@ জ্ঞাওয়ার আপনি উত্থাপিত কোনও বিষয়কে আপনি সম্বোধন করেননি; ব্যতিক্রমটি কেবল তখনই ছুঁড়ে ফেলা হয় যখন ফাইলটি খোলার নয়; এবং এক ঘন্টার মধ্যে ঘটে যাওয়া অপারেশনগুলির জন্য মাইক্রো-অপ্টিমাইজেশানের প্রয়োজন হয় না। আপনার চূড়ান্ত বাক্যটি আজেবাজে কথা।
ব্যবহারকারী 207421

1
@ ডগহাউফ আপনার ক্ষেত্রে কোনও সমস্যা নেই কারণ আপনি অস্তিত্ব যাচাই করার পরে আপনি কিছু করার চেষ্টা করেন না। তবে ওপি খোলার আগে বিশেষভাবে পরীক্ষা করতে বলেছে। এই ক্ষেত্রে কেবল ফাইলটি খোলার চেষ্টা করা / ধরা ভাল to
ড্যান পাসারো

8

আমার কাছে শান এও হার্নির গৃহীত উত্তরের সংমিশ্রণ এবং কর্ট 3z এর ফলস্বরূপ মন্তব্যটি সেরা সমাধান বলে মনে হচ্ছে।

নিম্নলিখিত স্নিপেট ব্যবহার করেছেন:

File f = new File(filePathString);
if(f.exists() && f.isFile()) {
    //do something ...
}

আশা করি এটি কারও সাহায্য করতে পারে।


4

আমি জানি আমি এই থ্রেডে কিছুটা দেরি করেছি। যাইহোক, এখানে আমার উত্তরটি জাভা and এবং তার থেকে কার্যকর।

নিম্নলিখিত স্নিপেট

if(Files.isRegularFile(Paths.get(pathToFile))) {
    // do something
}

পুরোপুরি প্রশংসনীয়, কারণ ফাইল উপস্থিত না থাকলে পদ্ধতিটি isRegularFileফিরে আসে false। অতএব, পরীক্ষা করার দরকার নেই Files.exists(...)

নোট করুন যে অন্যান্য প্যারামিটারগুলি লিঙ্কগুলি কীভাবে পরিচালনা করা উচিত তা নির্দেশ করে options ডিফল্টরূপে, প্রতীকী লিঙ্কগুলি অনুসরণ করা হয়।

জাভা ওরাকল ডকুমেন্টেশন থেকে


সোনার ডক্স থেকে: ফাইল.এক্সিস্ট পদ্ধতিতে জেডিকে 8-তে উল্লেখযোগ্যভাবে খারাপ পারফরম্যান্স রয়েছে এবং প্রকৃতপক্ষে অস্তিত্ব নেই এমন ফাইলগুলি চেক করতে ব্যবহৃত হলে অ্যাপ্লিকেশনটি উল্লেখযোগ্যভাবে ধীর করতে পারে। একই জন্য যায় Files.notExists, Files.isDirectoryএবং Files.isRegularFile. এর সর্বোত্তম বিকল্প হ'ল:path.toFile().exists()
জেনাট

4

কমন্স ফাইল ইউটিলেস https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html এর সাথে পরিচিত হওয়াও এটির জন্য উপযুক্ত এবং এই ফাইলগুলি পরিচালনা করার জন্য অতিরিক্ত পদ্ধতি রয়েছে এবং জেডিকে থেকে প্রায়শই ভাল।


19
প্রশ্নের উত্তর না দেওয়ার উপায়। আমি সম্মত হই যে কমন্সের কাছে প্রচুর উপকারী জিনিস রয়েছে তবে আমরা সম্ভবত এটি আরও একধাপ এগিয়ে নিয়ে যেতে এবং ওপি জিজ্ঞাসা করা প্রশ্নের উত্তর দিতে পারতাম।
ডেমোঙ্গোলেম

4
তিনি আমার পক্ষে যথেষ্ট উত্তর দিয়েছেন।
বুলিয়ুল

3

উদাহরণস্বরূপ আপনার যদি কোনও ফাইল ডিরেক্টরি থাকে এবং আপনি এটির উপস্থিতি আছে কিনা তা পরীক্ষা করতে চান

File tmpDir = new File("/var/tmp");

boolean exists = tmpDir.exists();

exists ফাইল উপস্থিত না থাকলে মিথ্যা ফিরিয়ে দেবে

উত্স: https://alvinalexander.com/java/java-file-exists-directory-exists


2

ভাল কোডিং অনুশীলন এবং সমস্ত ক্ষেত্রে আচ্ছাদন সহ সাধারণ উদাহরণ:

 private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
        File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
        if (f.exists()) {
            throw new FileAlreadyExistsException(f.getAbsolutePath());
        } else {
            try {
                URL u = new URL(url);
                FileUtils.copyURLToFile(u, f);
            } catch (MalformedURLException ex) {
                Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

রেফারেন্স এবং আরও উদাহরণ

https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsexception-implementations


1

আপনি যদি Fileএকটি ডিরেক্টরিতে একটি পরীক্ষা করতে চানdir

String directoryPath = dir.getAbsolutePath()
boolean check = new File(new File(directoryPath), aFile.getName()).exists();

এবং checkফলাফলটি পরীক্ষা করুন



1

স্ট্রিং সহ ফাইল কনস্ট্রাক্টর ব্যবহার করবেন না।
এটি কাজ নাও করতে পারে!
এর পরিবর্তে ইউআরআই ব্যবহার করুন:

File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) { 
    // to do
}

কাজ করবে না কেন? এবং ইউআরআই ব্যবহার করে কীভাবে তা ঠিক করা যায়?
ব্যবহারকারী 207421

আমরা একটি সমস্যা ছিল। f.exists () সত্য ছিল এবং আমরা এমনকি ফাইলের সামগ্রী পেতে পারি। সমস্যাটি ছিল, পথটি ভুল ছিল তবে ফাইলটির নামটি ঠিক ছিল, এমনকি এটি অন্য ফাইল was ইউআরআই দিয়ে কনস্ট্রাক্টর কল পরিবর্তন করে সমস্যাটি স্থির করে।
iviorel

1

File.exists()কোনও ফাইল উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে, এটি চেক অপারেশন স্থিতি নির্দেশ করার জন্য একটি বুলিয়ান মান প্রদান করবে; ফাইলটি বিদ্যমান থাকলে সত্য; মিথ্যা যদি না থাকে।

File f = new File("c:\\test.txt");

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}

0

আপনি চেক করতে নিম্নলিখিত কোড ব্যবহার করতে পারেন:

import java.io.File;
class Test{
    public static void main(String[] args){
        File f = new File(args[0]); //file name will be entered by user at runtime
        System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise

        if(f.exists())
        {
             //executable code;
        }
    }
}

0

আপনি এটি এইভাবে তৈরি করতে পারেন

import java.nio.file.Paths;

String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
    //...do somethinh
}

অ্যাকাউন্টে বিবেচনার জন্য আপনার উত্তরটির জেডিকে 8 এর সাথে File.is Exist()বা তুলনায় সেরা পারফরম্যান্স রয়েছেFiles.isRegularFile()
ক্রিশ্চিয়ান চ্যাপারো এ।

0

এই পদ্ধতিগুলি ডিজাইনের নির্দিষ্ট উদ্দেশ্য রয়েছে। আমরা বলতে পারি না যে ফাইল বিদ্যমান আছে কিনা তা পরীক্ষা করতে কাউকে ব্যবহার করুন।

  1. isFile () : এই বিমূর্ত পথ দ্বারা চিহ্নিত ফাইলটি একটি সাধারণ ফাইল কিনা তা পরীক্ষা করে ।
  2. বিদ্যমান () : এই বিমূর্ত পথ দ্বারা চিহ্নিত ফাইল বা ডিরেক্টরি উপস্থিত কিনা তা পরীক্ষা করে। docs.oracle.com

-5

কোনও ফাইল উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে কেবল java.io. * লাইব্রেরি আমদানি করুন

File f = new File(“C:\\File Path”);

if(f.exists()){
        System.out.println(“Exists”);        //if file exists
}else{
        System.out.println(“Doesn't exist”);         //if file doesn't exist
}

সূত্র: http://newsdivariotipo.altervista.org/java-come-controllare-se-un-file-esiste/


2
এটি কিছুই যোগ করে না। আপনি যা বলবেন তা বেশ কয়েকটি উত্তরে বলা হয়েছে। দয়া করে গোলমাল তৈরি করবেন না।
ক্লুত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.