java自动生成时间的代码_分享代码片段:如何对自动生成的java代码做自动格式化,以达到接近手写的效果...

如题,有的时候,我们会采用自动生成java代码的方式来完成一些任务,比如根据业务数据自动生成调用api的sdk供用户下载、使用;

这样自动生成的代码,如果未经格式化处理,基本上是不可读的;

正好,我们常用的eclipse,快捷键"ctrl + shift + F"就能自动格式化java代码;

那么,下面这段代码,就是将eclipse的这个功能模块给“抠”出来单独调用,达到格式化java代码的目的:

package test;

import java.util.Map;

import org.eclipse.jdt.core.JavaCore;

import org.eclipse.jdt.core.ToolFactory;

import org.eclipse.jdt.core.formatter.CodeFormatter;

import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;

import org.eclipse.jface.text.Document;

import org.eclipse.jface.text.IDocument;

import org.eclipse.text.edits.TextEdit;

/**

* 调用eclipse jdt core对生成的java源码进行格式化

*

* @author pf-miles 2014-4-16 下午2:48:29

*/

public class JavaCodeFormattingUtil {

/**

* 尝试对传入的JavaSourceFile格式化,此操作若成功则将改变传入对象的内容

*/

@SuppressWarnings({ "rawtypes", "unchecked" })

public static void tryFormat(JavaSourceFile src) {

Map m = DefaultCodeFormatterConstants.getEclipseDefaultSettings();

m.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6);

m.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6);

m.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6);

m.put(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT, "160");

m.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);

String code = null;

IDocument doc = null;

try {

code = src.getCharContent(true).toString();

CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(m);

TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN, code, 0, code.length(), 0, null);

if (textEdit != null) {

doc = new Document(code);

textEdit.apply(doc);

src.setCode(doc.get());

}

} catch (Exception e) {

throw new RuntimeException("Error occured while formatting code: " + src.toUri(), e);

}

}

}

其中“code = src.getCharContent(true).toString();”这一行先不必关心"src"是个什么对象,那是我们自定义的东西,这里的重点只需要得到“code”,然后后面的操作完全是针对"code"这个string形式的java代码而做;

其中还能对格式化属性做一些配置, 如:

VERSION_1_6是指对应的java版本;

而DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT则指一行最多到多长就会自动换行;

DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR是说想要使用什么字符来做缩进,一般都选择空格或tab;

这些都可以根据需求随意调整;

当然,上述这些代码的运行,是需要依赖eclipse的格式化模块功能库的,这个库,目前没有统一的依赖地址;可以根据类名上网随便搜一个可用的maven仓库依赖即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值