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

时间:2012-12-26 17:52:24

标签: java refactoring

我想从我的java代码中删除/注释System.out.println的所有出现。 此System.out.println可能位于ifif elseforwhile内或任何位置。由于源代码文件较大,我无法手动完成。

请帮我自动完成此过程。是否有任何重构工具可用于此任务? 我可以使用eclipse JDT吗?

8 个答案:

答案 0 :(得分:6)

<强>更新

如上所述here创建一个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

然后切换到日志框架,这将允许您轻松处理东西


<强>链接

答案 1 :(得分:3)

可以在源代码文件中使用原始查找/替换功能来注释掉(或删除)语句,但无论正则表达式是什么都可以轻易破解,所以也许你最好注意记录像log4j或slf4j这样的框架。

大图片:不是使用通常的System.out.println(),而是使用一行代码,例如:

logger.debug("Just entered main");

日志框架可以配置with a simple property file,因此您可以拥有多个appender(控制台,文件,数据库等),并根据需要单独关闭每个appender(例如控制台appender)。要切换到日志记录API,您仍然需要对源文件执行原始查找/替换,并且可能手动修复一些事情,无论是在IDE中,还是使用如下命令:

find src/ -name '*.java' | \
xargs sed -i -e 's/System.out.println/logger.verbose/g'

答案 2 :(得分:2)

如果你不使用IDE,在Linux上:

sed '/System.out.println/d' %YOUR_PROJ_DIR%/*.java
如果您安装了cygwin,在Windows上

可以执行相同的操作。

答案 3 :(得分:2)

正如Jigar Joshi所说,使用 find&amp;替换方法可能对您有很大帮助,特别是如果您不干扰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) {}
}));

答案 4 :(得分:1)

我已经使用jEdit文本编辑器来完成这样的任务。可能还有其他文本编辑器也可以这样做,重要的功能是查找和替换目录/子目录中的搜索。

  1. 打开查找并替换对话。
  2. 确保选中搜索文件夹和子目录选项。 同样,这是在整个项目中处理事务的关键。
  3. 写&#34; System.out.println&#34;在查找字段中。编写正则表达式来处理参数。
  4. 写//System.out.println或者更安全地写#34; / * System.out.println * /&#34;在替换字段中(或者如果它更可取,则将其留空)。使用正则表达式匹配来替换函数的原始参数。
  5. 我建议您手动替换前几次出现,以确保一切按预期进行。一旦你确信它是,点击全部替换并庆祝。
  6. 我不是Java程序员,但此解决方案适用于任何语言。希望有所帮助。祝你好运!

答案 5 :(得分:0)

做一个简单的查找和替换。应该这样做。

答案 6 :(得分:0)

您可以在应用程序中使所有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");
    }
}

将不再打印。

答案 7 :(得分:0)

我们有一个实现的插件,可以搜索和注释Java代码中的所有System.out.println,前提是您使用Eclipse作为Java开发的IDE。

通过以下链接阅读并下载该插件 http://eclipseo.blogspot.in/2013/05/commenting-systemoutprintln-from.html