System.out.println从多个java源文件中删除/注释

我想从我的java代码中删除/注释所有出现的System.out.printlnifif elseforwhile或任何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是查找和替换目录/子目录中的搜索。

  1. 打开查找并替换对话。
  2. 确保选中搜索文件夹和子目录选项。 同样,这是在整个项目中处理事务的关键。
  3. 在查找字段中写入“System.out.println”。 编写正则表达式来处理参数。
  4. 在替换字段中写入//System.out.println或者更安全地写一个“/*System.out.println*/”(如果可取的话,只留空)。 使用正则表达式匹配来替换函数的原始参数。
  5. 我建议您手动替换前几次出现,以确保一切按预期进行。 一旦你确信它是,击中替换所有并庆祝。

我不是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