java निर्देशिका में फ़ाइलों को खोजें, जिनमें दो कीवर्ड में से एक है



regex file (1)

आप FileVisitor का उपयोग कर सकते हैं, यह बहुत सुविधाजनक है।

यहां एक उदाहरण है:

public class FileVisitorTest {

    @Test
    public void test() throws Exception {
        String path = "D:\\downloads\\";
        findFiles(path,"apache", "Test");
    }

    public void findFiles(String path, String... keyWords) {
        try {
            Files.walkFileTree(Paths.get(path), new FileVisitor<Path>() {
                @Override
                public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes fileAttributes) {
                    return FileVisitResult.CONTINUE;
                }

                public FileVisitResult visitFile(Path path, BasicFileAttributes fileAttributes) {
                    for (String keyWord : keyWords) {
                        if (path.getFileName() != null && path.getFileName().toFile().getName().contains(keyWord))
                            System.out.println("File name:" + path.getFileName());
                    }

                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

यदि आप निर्देशिका के साथ preVisitDirectory करना चाहते हैं, तो एक डायरेक्टरी पर जाने से पहले और बाद में postVisitDirectory करने के लिए preVisitDirectory और postVisitDirectory विधियों का उपयोग करें।

मेरे लिनक्स सर्वर में एक ऐसी निर्देशिका है जिसमें कई अन्य सब-डायरेक्ट्री शामिल हैं, जिसमें कीवर्ड के नाम से फ़ाइलें शामिल हैं उदाहरण के लिए:

Dir1:
 -Dir1.1:
   -file-keyword11-keyword7-keyword9.txt
   -file-keyword2-keyword7-keyword97.txt
 -Dir1.2:
   -file-keyword4-keyword6-keyword9.txt
   -file-keyword2-keyword8-keyword3.txt
Dir2:
 -Dir2.1:
   -file-keyword5-keyword42-keyword2.txt
   -file-keyword8-keyword11-keyword9.txt

मुझे एक ऐसी विधि बनाने की आवश्यकता है जो दो फ़ाइलों में से एक में से एक वाली सभी फाइलों की सूची वापस करता है उदाहरण के लिए:

findFiles("keyword11", "keyword42");

पिछले उदाहरण की निम्न फाइलों को वापस करना चाहिए:

-file-keyword11-keyword7-keyword9.txt
-file-keyword5-keyword42-keyword2.txt
-file-keyword8-keyword11-keyword9.txt

मैं पुनरावर्ती पद्धति बनाने के बारे में सोच रहा हूं जो परीक्षण करता है यदि प्रत्येक फ़ाइल का नाम दो कीवर्ड में से एक होता है लेकिन मुझे प्रदर्शन के बारे में डर लग रहा है, क्योंकि निर्देशिका में हजारों फाइलें और उप-निर्देशिका हैं और हर दिन बनाए जाने वाली अधिक से अधिक फाइलें हो सकती हैं

मैं जानना चाहूंगा कि यह करने का सही तरीका क्या होगा। क्या मुझे file.getName().contains() उपयोग करना चाहिए file.getName().contains() विधि है? क्या मुझे रेगेक्स का उपयोग करना चाहिए? या क्या मुझे grep जैसे लिनक्स कमांड का उपयोग करना चाहिए?





grep