我想从我的Java代码中删除/评论System.out.println
的所有出现。此System.out.println
可以在if
,if else
,for
,while
或任何地方内。由于较大的源代码文件,我无法手动执行此操作。
请帮助我自动化此过程。该任务有任何可重构工具吗?我可以使用Eclipse JDT吗?
update
如下所述,创建一个nulloutput
public final DevNull {
public final static PrintStream out = new PrintStream(new OutputStream() {
public void close() {}
public void flush() {}
public void write(byte[] b) {}
public void write(byte[] b, int off, int len) {}
public void write(int b) {}
} );
}
并将System.out.print
替换为DevNull.out.print
及以后切换到记录框架,这将使您轻松处理
链接
- 如何删除system.out.println从codebase
you 可以使用raw查找/替换源代码文件中的功能来注释(或删除)语句您最好知道log4j或slf4j等记录框架。
首先,首先:您最终会使用以下代码行,而不是使用通常的System.out.println()
,例如:
logger.debug("Just entered main");
可以使用一个简单的属性文件配置日志记录框架,因此您可以拥有多个附录(控制台,文件,数据库等),并按需分开关闭每个附录(例如,例如Console Appender)。要切换到记录API,您仍然必须在源文件上执行RAW查找/替换,并且可能手工修复几件事,要么在您的IDE中或以下命令:
find src/ -name '*.java' |
xargs sed -i -e 's/System.out.println/logger.verbose/g'
如果您不使用IDE,则在Linux上:
sed '/System.out.println/d' %YOUR_PROJ_DIR%/*.java
在Windows上安装了Cygwin,您可以做同样的事情。
正如Jigar Joshi所说,使用 find&替换方法可能会对您有很大帮助,尤其是如果您不干扰System.out.println
的代码。
,如果编辑/更改源代码不是必须为您提供不同的解决方案。您可以禁用驱动程序程序中的System.out
流,那么这些语句不会打印任何内容。您只需要这样设置:
System.setOut(new PrintStream(new OutputStream() {
public void write(int b) {
// No operation.
}
public void close() {}
public void flush() {}
public void write(byte[] b) {}
public void write(byte[] b, int off, int len) {}
public void write(int b) {}
}));
我已经使用了Jedit文本编辑器来完成这样的任务。可能还有其他文本编辑器可以做同样的事情,重要的功能是通过目录/子目录查找和替换搜索。
- 打开查找并替换对话。
- 确保检查搜索文件夹和子目录选项。再次,这是在整个项目中处理事情的关键。
- 在查找字段中写入" system.out.println"。写一个正则表达式来处理参数。
- write//system.out.println或更安全的"/* system.out.println*/"在"替换"字段中(或者如果最好将其留为空白)。使用正则表达式匹配将原始参数替换为函数。
- 我建议您手动替换前几次事件,以确保一切都按预期进行。一旦您确信它,请打全部替换并庆祝。
我不是Java程序员,但是该解决方案应适用于任何语言。希望有帮助。祝你好运!
做一个简单的查找并替换。那应该做。
您可以在应用程序中制作所有System.out.println
,不要在控制台中打印任何内容。创建一个类似:
import java.io.PrintStream;
public class MyStream extends PrintStream {
private static final MyStream INSTANCE = new MyStream();
public static void init() {
System.setOut(INSTANCE);
}
private MyStream() {
super(System.out);
}
@Override
public void println(Object x) {
return;
}
@Override
public void println(String x) {
return;
}
}
使用它为:
public class Test {
public static void main(String... args) {
MyStream.init();
System.out.println("This line will not print");
}
}
将不再打印。