Как извлечь всю строку из всех файлов Java в проекте Java?

Мне нужно извлечь все значения hard coded Strings из всех Java файлов в Java project
В Java Constant file

например

Ввод

// Java file number 1
public class A {    
    public static void main(String[] args) {
        System.out.println("HardCoded String A");
    }
}

// Java file number 2
public class B {    
    public static void main(String[] args) {
        System.out.println("HardCoded String B");
    }
}

Выход

// a Java Constant file
public class MyConstants {  
    public static final String HardCodedString_01 = "HardCoded String A";
    public static final String HardCodedString_02 = "HardCoded String B";   
}

// Java file number 1
public class A {    
    public static void main(String[] args) {
        System.out.println(MyConstants.HardCodedString_01);
    }
}

// Java file number 2
public class B {    
    public static void main(String[] args) {
        System.out.println(MyConstants.HardCodedString_01);
    }
}

Мне известно, что Внешние строки для Eclipse
enter image description here НО он работает над одним файлом не всеми файлами

И когда я проверяю это сообщение
Извлечь всю строку из проекта java
Я не смог найти ссылку предоставленной презентации

Также я проверяю этот пост
Внешние строки для проекта Android
Но это предусмотрено для проектов Android не Java projects

Ответ 1

Сначала, чтобы проверить все жестко закодированные значения строк из всех, используя Eclipse
Основная идея заключается в том, что The Regular Expression Строковое значение Java "*"
Так
Мы можем это сделать, используя поиск по этим критериям
Например

Eclipse Поиск Запрос | enter image description here

Результат поиска Eclipse

enter image description here

Ответ 2

Возможно, это слишком сложное решение, но попробуйте sonarqube, который может дать вам статический анализ кода и намного больше, чем просто стробированные строковые значения.

Если вы ищете код для этого, вы можете попробовать linux командной строки (например, grep -rnw '/path/to/something/' -e "pattern" ).

Ответ 3

Я предполагаю, что у вас большой проект, и вам не обязательно искать ваши жестко закодированные строки.

В то время как Eclipse "Externalize String" не будет делать все файлы за один раз, если вы перейдете в контекст своего проекта (щелкнув правой кнопкой мыши проект или исходный каталог), он должен найти все ваши классы-кандидаты. Тем не менее, вам все равно придется перебирать каждый файл через новое окно, но это, по крайней мере, дает вам список файлов, проверенных с помощью Kepler SR1.

Ответ 4

We can use Java Code also.We need to pass the directory name as below 
and it will give the File name and matched Line which contains the Hard Code   
String ( " <Hard Code String in Double Quotes> " ) .

Каталог/Путь: c:\Пользователь\XYZ\src\

Образцы журналов

Код:

                import java.io.BufferedReader;
                import java.io.File;
                import java.io.FileReader;
                import java.io.IOException;
                import java.util.List;
                import org.apache.commons.io.FileUtils;
                import org.apache.commons.io.filefilter.TrueFileFilter;
                import org.apache.log4j.Logger;

                public class ScanFiles {

                    private static final Logger logger = ScanFilesLogger.getLogger(ScanFiles.class);

                    private static void searchFiles(String folderPath, String searchString) throws IOException {
                        File folder = new File(folderPath);
                        List<File> files = (List<File>) FileUtils.listFiles(folder, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
                        if (folder.isDirectory()) {
                             File[] fList = folder.listFiles();
                             for (File file : files) {
                                 if (!file.canRead()) {
                                    file.setReadable(true);
                                    }
                                    String content = "";
                                    try(BufferedReader br = new BufferedReader(new FileReader(file));) {
                                        StringBuilder sb = new StringBuilder();
                                        String line = br.readLine();
                                        logger.info("File :::::  " + file.getName());
                                        while ((line = br.readLine()) != null)
                                        {
                                        // Below condition we can omit in the search condition //
                                        if (line.contains(searchString) && (!line.contains("System.out.println") && !line.contains("logger.info") && !line.contains("Logger.info") && !line.contains("logger.debug") && !line.contains("Logger.debug") && !line.contains("logger.error") && !line.contains("Logger.error")  && !line.contains("Logger.info") && !line.contains("logger.debug") && !line.contains("Logger.debug") && !line.contains("logger.error") 
                                                     && !line.contains("LOGGER.debug")  && !line.contains("LOGGER.info")  && !line.contains("LOGGER.error") && !line.contains("assertTrue") && !line.contains("//") && !line.contains("/*")))
                                            {

                                                logger.info("Matched Line :::::"+line);
                                            }                           
                                        }
                                    } 
                            }
                        } else {
                            System.out.println("Not a Directory!");
                        }
                     }
                    public static void main(String args[]) throws IOException{

                        if(args.length == 0)            
                        {
                            logger.info(" ::::::::::  PATH cannot be empty ::::::::::");
                            System.exit(0);
                        }           
                            searchFiles(new File(args[0]).getAbsolutePath(),"\"");

                    }
                }