system.out.println删除/来自多个Java源文件的评论



我想从我的Java代码中删除/评论System.out.println的所有出现。此System.out.println可以在ifif elseforwhile或任何地方内。由于较大的源代码文件,我无法手动执行此操作。

请帮助我自动化此过程。该任务有任何可重构工具吗?我可以使用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文本编辑器来完成这样的任务。可能还有其他文本编辑器可以做同样的事情,重要的功能是通过目录/子目录查找和替换搜索。

  1. 打开查找并替换对话。
  2. 确保检查搜索文件夹和子目录选项。再次,这是在整个项目中处理事情的关键。
  3. 在查找字段中写入" system.out.println"。写一个正则表达式来处理参数。
  4. write//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");
    }
}

将不再打印。

最新更新