Java Academy · पाठ

Files.walk से Directory Trees पर चलना

Files.walk से files की recursive सूची बनाएँ, extension के आधार पर filter करें और directory sizes निकालें।

पाठ 3, कुल 4 में से13 चरण

Files.walk से Directory Trees पर चलना, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Files.walk का अवलोकन

Files.walk(startPath) एक आलसी Stream<Path> लौटाता है, जो दिए गए पथ से शुरू होकर सभी फ़ाइलों और डायरेक्टरी की पुनरावर्ती सूची बनाता है। यह गहराई-प्रथम तरीके से चलता है और शुरुआती पथ को भी शामिल करता है।

import java.nio.file.*;
import java.util.stream.*;

try (Stream<Path> stream = Files.walk(Path.of("/home/user/projects"))) {
    stream.forEach(System.out::println);
} // stream and underlying resources closed automatically

गहराई सीमित करना

बहुत गहरी पुनरावृत्ति रोकने के लिए अधिकतम गहराई दें:

Path root = Path.of("/home/user/projects");

// Only immediate children (depth 1)
try (var stream = Files.walk(root, 1)) {
    stream.filter(p -> !p.equals(root)) // exclude start path
          .forEach(System.out::println);
}

फ़ाइल प्रकार के आधार पर फ़िल्टर करना

फ़िल्टर करने के लिए Files.isRegularFile() या Files.isDirectory() के साथ संयोजित करें:

Path root = Path.of(".");

try (var stream = Files.walk(root)) {
    long fileCount = stream
        .filter(Files::isRegularFile)
        .count();
    System.out.println("Files: " + fileCount);
}

एक्सटेंशन के आधार पर फ़िल्टर करना

किसी विशिष्ट एक्सटेंशन वाली सभी फ़ाइलें खोजें:

try (var stream = Files.walk(Path.of("/src"))) {
    List<Path> javaFiles = stream
        .filter(Files::isRegularFile)
        .filter(p -> p.toString().endsWith(".java"))
        .collect(Collectors.toList());
    javaFiles.forEach(System.out::println);
}

डायरेक्टरी का आकार निकालना

किसी डायरेक्टरी के अंतर्गत सभी फ़ाइलों के आकार का योग करें:

try (var stream = Files.walk(Path.of("/home/user/data"))) {
    long totalBytes = stream
        .filter(Files::isRegularFile)
        .mapToLong(p -> {
            try { return Files.size(p); }
            catch (IOException e) { return 0; }
        })
        .sum();
    System.out.printf("Total: %.2f MB%n", totalBytes / 1_048_576.0);
}

Files.list बनाम Files.walk

Files.list(dir) किसी एक डायरेक्टरी की केवल तत्काल सामग्री की सूची बनाता है (ls की तरह)। Files.walk उप-डायरेक्टरी में भी पुनरावृत्ति करता है।

// Only immediate children:
try (var stream = Files.list(Path.of("/home/user"))) {
    stream.forEach(System.out::println);
}

गुण-आधारित खोज के लिए Files.find

फ़ाइल के गुणों के आधार पर मिलान करते समय Files.find(root, depth, matcher), walk+filter की तुलना में अधिक प्रभावी है:

import java.nio.file.attribute.BasicFileAttributes;

try (var stream = Files.find(
        Path.of("/home/user"),
        Integer.MAX_VALUE,
        (p, attrs) -> attrs.isRegularFile() && attrs.size() > 1_000_000
)) {
    stream.forEach(p -> System.out.println("Large file: " + p));
}

डायरेक्टरी ट्री हटाना

डायरेक्टरी और उसकी सभी सामग्री हटाने के लिए walk + sorted(उलटे क्रम में) का उपयोग करें (सबसे गहरी फ़ाइलें पहले):

Path toDelete = Path.of("/tmp/workdir");
try (var stream = Files.walk(toDelete)) {
    stream.sorted(Comparator.reverseOrder())
          .forEach(p -> {
              try { Files.delete(p); }
              catch (IOException e) { e.printStackTrace(); }
          });
}

डायरेक्टरी ट्री कॉपी करना

स्रोत ट्री पर चलें और डायरेक्टरी संरचना बनाए रखते हुए प्रत्येक फ़ाइल कॉपी करें:

Path src = Path.of("/source"), dst = Path.of("/destination");
try (var stream = Files.walk(src)) {
    stream.forEach(p -> {
        try {
            Path target = dst.resolve(src.relativize(p));
            if (Files.isDirectory(p)) Files.createDirectories(target);
            else Files.copy(p, target, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) { throw new RuntimeException(e); }
    });
}

पहुंच से बाहर फ़ाइलों को संभालना

यदि Files.walk को ऐसी डायरेक्टरी मिलती है जिसे वह पढ़ नहीं सकता, तो यह IOException उत्पन्न करता है। FileVisitOption.FOLLOW_LINKS का सावधानी से उपयोग करें — प्रतीकात्मक लिंक के चक्र अनंत पुनरावृत्ति का कारण बन सकते हैं।

try (var stream = Files.walk(Path.of("/"),
        FileVisitOption.FOLLOW_LINKS)) { // caution: symlink loops
    // ...
} catch (IOException e) {
    System.err.println("Access error: " + e.getMessage());
}

walkFileTree: इवेंट-आधारित पुनरावृत्ति

अधिक सूक्ष्म नियंत्रण (पहले जाना, बाद में जाना और त्रुटि प्रबंधन) के लिए FileVisitor के साथ Files.walkFileTree() का उपयोग करें:

Files.walkFileTree(Path.of("/home/user"), new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        System.out.println("File: " + file);
        return FileVisitResult.CONTINUE;
    }
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
        System.out.println("Dir: " + dir);
        return FileVisitResult.CONTINUE;
    }
});

त्वरित जाँच

किसी डायरेक्टरी के केवल तत्काल चिल्ड्रन (बिना पुनरावृत्ति) की सूची बनाने के लिए किस Files विधि का उपयोग करना चाहिए?

Files.walk का पुनरावलोकन

मुख्य बातें:

  • Files.walk(root) — सभी पथों की पुनरावर्ती आलसी Stream
  • स्ट्रीम बंद करने के लिए हमेशा संसाधन-प्रबंधन ब्लॉक का उपयोग करें
  • Files.isRegularFile/isDirectory से फ़िल्टर करें; endsWith से एक्सटेंशन के आधार पर फ़िल्टर करें
  • Files.list(dir) — केवल तत्काल चिल्ड्रन
  • Files.find — गुण-आधारित प्रभावी खोज
  • walkFileTree — पहले और बाद में जाने वाले कॉलबैक के साथ इवेंट-आधारित पुनरावृत्ति
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Files.walk से Directory Trees पर चलना” पाठ निःशुल्क है?

हाँ—“Files.walk से Directory Trees पर चलना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Files.walk से Directory Trees पर चलना” में मैं क्या सीखूँगा?

Files.walk से files की recursive सूची बनाएँ, extension के आधार पर filter करें और directory sizes निकालें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Files.walk से Directory Trees पर चलना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Path: File Locations का निरूपण
  2. Files Utility: Read, Write, Copy, Move
  3. Files.walk से Directory Trees पर चलना
  4. WatchService: File Changes की निगरानी
← Java Academy पर वापस जाएँ