java - ويندوز - كيفية فتح ملف بصيغة jar



ابحث عن الملفات في الدليل التي تحتوي على واحدة من كلمتين رئيسيتين (1)

يمكنك استخدام فليفيسيتور، انها مريحة للغاية.

في ما يلي مثال:

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 أساليب للقيام سمث قبل وبعد زيارة الدليل.

يحتوي خادم لينوكس على دليل يحتوي على العديد من الدلائل الفرعية الأخرى، التي تحتوي على ملفات مسماة بالكلمات الرئيسية. فمثلا:

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() هل يجب استخدام التعبير العادي؟ أو يجب استخدام الأمر لينوكس مثل غريب؟





grep