2012-05-28 15 views
6

जावा में किसी विशिष्ट नाम के साथ निर्देशिका खोजने का सबसे अच्छा तरीका क्या है? जो निर्देशिका मैं खोज रहा हूं वह या तो वर्तमान निर्देशिका या इसकी उपनिर्देशिकाओं में से एक में स्थित हो सकती है।जावा में एक निर्देशिका की खोज करें

+3

[? क्या आप की कोशिश की है] (http://www.whathaveyoutried.com/) या फिर, आपके सिद्धांतों के बारे में सोचने वाले सर्वोत्तम 2 (शस्त्र) दृष्टिकोणों के परीक्षण के आधार पर आपके सिद्धांत क्या हैं? या क्या इस सवाल का वास्तव में मतलब है "क्या आप मुझे teh codez दे सकते हैं?"? –

उत्तर

2

आपका समाधान के File.listFiles(String)

java.io.File API reference

+0

धन्यवाद एंड्रयू। मैं 1.6 को बाधित कर रहा हूं, लेकिन मैं भूल जाता हूं कि अन्य नहीं हैं। – MadcoreTom

+0

* "मैं 1.6 अवरुद्ध हूं" * जैसा कि मैं हूं (सिवाय जब मैं 1.5 देव या उससे आगे में डुबकी डालता हूं)। भाग्यशाली उन दस्तावेज़ों। '@ से' टैग हैं और कंपाइलर में संस्करण संगतता के 'एसिड परीक्षण' के रूप में क्रॉस-संकलन विकल्प हैं। मैं नवीनतम जावा डॉक्स से लिंक करूंगा, भले ही लोगों ने बताया कि वे जावा 1.3 के लिए विकास कर रहे थे। ;) –

0

फूट डालो उपयोग शामिल है और विजय प्राप्त करेंगे? एक अनुभवहीन दृष्टिकोण:

  1. सूची हर निर्देशिका
  2. यदि सूची एक मिलान निर्देशिका, प्रिंट हैं और इससे अनुप्रयोग
  3. कार्य प्रारंभ से बाहर निकलें: हर निर्देशिका के लिए, आप एक काम शुरू कर सकते हैं, तो निम्न बातें करता है प्रत्येक निर्देशिका के लिए।
4

फ़ाइल पेड़ पर चलने के लिए, FileVisitor इंटरफ़ेस का उपयोग किया जा सकता है। कृपया tutorial देखें। कृपया भी देखें।

+0

यह @ MadcoreTom की #listFiles की तुलना में एक बेहतर समाधान है क्योंकि यह फ़ाइल मिलने के बाद आपको चलने की सुविधा देता है। – Kong

0

कुछ की तरह:

public static final File findIt(File rootDir, String fileName) { 
    File[] files = rootDir.listFiles(); 
    List<File> directories = new ArrayList<File>(files.length); 
    for (File file : files) { 
     if (file.getName().equals(fileName)) { 
      return file; 
     } else if (file.isDirectory()) { 
      directories.add(file); 
     } 
    } 

    for (File directory : directories) { 
     File file = findIt(directory); 
     if (file != null) { 
      return file; 
     } 
    } 

    return null; 
} 
2

आप उल्लेख किया है प्रत्यावर्तन streams API के माध्यम से इस आवश्यकता को

import java.io.File; 

public class CheckFile { 

    private static boolean foundFolder = false; 

    public static void main(String[] args) { 
     File dir = new File("currentdirectory"); 
     findDirectory(dir); 
    } 

    private static void findDirectory(File parentDirectory) { 
     if(foundFolder) { 
      return; 
     } 
     File[] files = parentDirectory.listFiles(); 
     for (File file : files) { 
      if (file.isFile()) { 
       continue; 
      } 
      if (file.getName().equals("folderNameToFind")) { 
       foundFolder = true; 
       break; 
      } 
      if(file.isDirectory()) { 
       findDirectory(file); 
      } 
     } 
    } 

} 
+0

क्या मैं सही हूं कि यह विधि पुन: प्रयोज्य नहीं है (इसे कुछ उपयोगिता वर्ग में ले जाया जाएगा काम नहीं करेगा) यानी यह केवल एक बार फ़ोल्डर का पता लगा सकता है और एक बार पता चला कि 'पाया गया'ल्डर सच रहेगा? –

5

जावा 8 में को पूरा करना चाहिए:

Optional<Path> hit = Files.walk(myPath) 
    .filter(file -> file.getFileName().equals(myName)) 
    .findAny(); 

#walk आलसी है, इसलिए कोई भी short-circuiting terminal operation आईओ आवश्यक अनुकूलित करेगा।

+0

वह 'path.getioPathName' से 'स्ट्रिंग'' के साथ 'java.nio.Path' की तुलना करता है। मैं 'file.getFileName()। ToFile.getName() को यह जानकर कि यह जटिल लगता है, शायद महंगा लगता है। –

0

या, आप जब तक यह पाया फ़ाइल खोज रिकर्सिवली की अवधारणा का उपयोग करना चाहिए: यहाँ कोड है:

String name; //to hold the search file name 

public String listFolder(File dir) { 
    int flag; 
    File[] subDirs = dir.listFiles(new FileFilter() { 
     @Override 
     public boolean accept(File pathname) { 
      return pathname.isDirectory(); 
     } 
    }); 
    System.out.println("File of Directory: " + dir.getAbsolutePath()); 
    flag = Listfile(dir); 
    if (flag == 0) { 
     System.out.println("File Found in THe Directory: " + dir.getAbsolutePath()); 
     Speak("File Found in THe Directory: !!" + dir.getAbsolutePath()); 
     return dir.getAbsolutePath(); 
    } 
    for (File folder : subDirs) { 
     listFolder(folder); 
    } 
    return null; 
} 

private int Listfile(File dir) { 
    boolean ch = false; 
    File[] files = dir.listFiles(); 
    for (File file : files) { 
     Listfile(file); 
     if (file.getName().indexOf(name.toLowerCase()) != -1) {//check all in lower case 
      System.out.println(name + "Found Sucessfully!!"); 
      ch = true; 

     } 
    } 
    if (ch) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 
संबंधित मुद्दे