System.out.println从多个java源文件中删除/注释
我想从我的java代码中删除/注释所有出现的System.out.println
。 if
, if else
, for
, while
或任何if else
,此System.out.println
可能在内部。 由于源代码文件较大,我无法手动执行此操作。
请帮我自动化这个过程。 是否有任何重构工具可用于此任务? 我可以使用eclipse JDT吗?
更新
如上所述,创建一个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) {} } ); }
并用DevNull.out.print
替换System.out.print
然后切换到日志框架,这将允许您轻松处理东西
关联
- 如何从代码库中删除System.out.println
您可以在源代码文件中使用原始查找/替换function来注释掉(或删除)语句,但无论正则表达式是什么都可以轻易破解,因此您可能最好注意log4j或slf4j等日志框架。
首先是大图:不是使用通常的System.out.println()
,而是使用一行代码,例如:
logger.debug("Just entered main");
可以使用简单的属性文件配置日志记录框架,因此您可以拥有多个appender(控制台,文件,数据库等),并根据需要单独关闭每个appender(例如控制台appender)。 要切换到日志记录API,您仍然需要对源文件执行原始查找/替换,并且可能手动修复一些事情,无论是在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所说,使用查找和替换方法可能对您有很大帮助,特别是如果您不干扰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文本编辑器来完成这样的任务。 可能还有其他文本编辑器也可以这样做,重要的function是查找和替换目录/子目录中的搜索。
- 打开查找并替换对话。
- 确保选中搜索文件夹和子目录选项。 同样,这是在整个项目中处理事务的关键。
- 在查找字段中写入“System.out.println”。 编写正则表达式来处理参数。
- 在替换字段中写入//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"); } }
将不再打印。
我们有一个实现的插件,可以搜索和注释Java代码中的所有System.out.println,前提是您使用Eclipse作为Java开发的IDE。
阅读并通过以下链接下载插件http://eclipseo.blogspot.in/2013/05/commenting-systemoutprintln-from.html