我需要从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的外部化字符串
但它适用于一个文件而不是所有文件
当我查看这篇文章时
Extract all string from a java project
我找不到提供演示文稿的链接
我也检查这个帖子
Externalize strings for Android project
但这是为Android
项目而非Java
项目
答案 0 :(得分:7)
首先使用Eclipse
来检查所有硬编码的字符串值
核心思想是
Java硬编码字符串值的The Regular Expression
为"*"
所以
我们可以这样做使用此标准搜索
例如
Eclipse搜索查询
Eclipse搜索结果
答案 1 :(得分:1)
可能是一个过度设计的解决方案,但尝试一下sonarqube,它可以为您提供代码的静态分析,而不仅仅是硬编码的字符串值。
如果您正在寻找代码来执行此操作,您可以尝试使用linux命令行(例如grep -rnw' / path / to / somewhere /' -e" pattern")解决方案。
答案 2 :(得分:0)
我猜你有一个大项目,并不一定想要搜寻你的硬编码字符串。
虽然Eclipse的“Externalize String”不会一次性完成所有文件,但是如果你转到项目的上下文(通过右键单击项目或源目录),它应该找到所有候选类。但是,您仍然需要通过新窗口遍历每个文件,但这至少为您提供了使用Kepler SR1验证的文件列表。
答案 3 :(得分:0)
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:\ User \ 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(),"\"");
}
}