`
Goro
  • 浏览: 173478 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用程序整理代码 (Format Code)

阅读更多
最近有个项目需要用程序输出代码。
由于比较复杂,边整理缩进等再输出,显得非常麻烦。
所以,想到直接不管格式输出,然后再排版。

现在把代码共享给大家。

CodeFormater.java
package test.eclipse.plugin.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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;

public class CodeFormater {

	//private String codeFormatFile;
	
	private String fileEncoding;
	
	private Map options;
	
	private CodeFormatter codeFormatter;

	public CodeFormater(String fileEncoding) {
		init();	
		//this.codeFormatFile = codeFormatFile;
		this.fileEncoding = fileEncoding;
	}
	
	public CodeFormater() {
		init();
		//this.codeFormatFile = codeFormatFile;
		
	}
	
	private void init() {
		fileEncoding = "UTF-8";
		options = DefaultCodeFormatterConstants.getEclipseDefaultSettings();
		
//		// initialize the compiler settings to be able to format 1.6 code
		options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6);
		options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6);
		options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6);
//		
//		// change the option to wrap each enum constant on a new line
//		options.put(
//			DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS,
//			DefaultCodeFormatterConstants.createAlignmentValue(
//				true,
//				DefaultCodeFormatterConstants.WRAP_ONE_PER_LINE,
//				DefaultCodeFormatterConstants.INDENT_ON_COLUMN));
		
		// instanciate the default code formatter with the given options
		codeFormatter = ToolFactory.createCodeFormatter(options);
	}
	
	public void formatFile(String sourceFileName) {
		
		File file = new File(sourceFileName);
		BufferedReader in = null;
		BufferedWriter out = null;
		String line;
		String lineSeperator = System.getProperty("line.separator");
        try {
        	// retrieve the source 
        	in = new BufferedReader(new InputStreamReader(new FileInputStream(file), fileEncoding));
        	StringBuffer sb = new StringBuffer();;
            while ((line = in.readLine()) != null) {
            	sb.append(line);
            	sb.append(lineSeperator);
            }
            in.close();
            in = null;
            String contents = sb.toString();
                        
            IDocument doc = new Document(contents);
            // create delta
            TextEdit edit = codeFormatter.format(
					CodeFormatter.K_COMPILATION_UNIT, // format a compilation unit
					contents, // source to format
					0, // starting position
					contents.length(),  // length
					0, // initial indentation
					lineSeperator); // line separator

            // apply changes to content
            edit.apply(doc);
            
            // output
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), fileEncoding));
            String output = doc.get();
            out.write(output);
            out.flush();

        } catch (Exception e) {
        	e.printStackTrace();
        } finally {
        	try {
        		if (in != null) {
        			in.close();
        		}
        		if (out != null) {
        			out.close();
        		}        		 
        	} catch (Exception e) {
        		
        	}
        }
	}
}



调用

CodeFormater codeFormater = new CodeFormater();
codeFormater.formatFile("需要排版的代码的路经");


需要用到Eclipse插件里的一些库
org.eclipse.jdt.core
org.eclipse.jdt.text

参考网站
http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm

分享到:
评论
1 楼 lord_is_layuping 2010-10-21  
受用了哦,哈哈,我shouchang了先。

相关推荐

    CodeFormat

    CodeFormat,正如其名,是一款专为优化代码格式而设计的工具,它能够帮助开发者将杂乱无章的代码整理得井井有条,极大地提升了代码的可读性。尤其在团队协作的项目中,统一的代码风格可以减少沟通成本,提高代码审查...

    JCF (Jedi Code Format) Delphi代码格式化工具 v2.41..rar

    **JCF (Jedi Code Format) Delphi代码格式化工具** JCF,全称为Jedi Code Format,是一款专为Delphi编程语言设计的代码格式化工具。它由Jedi项目团队开发,旨在帮助开发者自动整理和格式化Delphi源代码,以保持代码...

    JsFormat.rar

    JSFormat.rar是一个针对JavaScript代码的格式化工具,它可以帮助开发者将混乱的、难以阅读的JavaScript代码整理成标准、易读的格式,提高代码的可维护性。 这个工具是用Visual C++(VC)开发的,VC是Microsoft公司...

    C语言格式(format)化下载

    "C语言格式(format)化下载" 主题涉及到的就是这样一个工具,用于自动将C语言的源代码按照特定的格式进行整理。 C语言格式化器,也被称为代码美化器或代码格式化器,是一种工具,它可以自动调整代码的缩进、空格、...

    formater

    标题中的"formater"指的是代码格式化工具,这类工具在编程领域中广泛使用,用于自动按照特定规范或约定对代码进行美化和整理。这通常包括缩进、换行、命名规则等方面的调整,使得代码更易读、易维护。在团队开发中,...

    HTML_Format.class.design.code.rar_class

    1. **代码格式化**:HTML代码往往在编写过程中为了快速输入而显得较为混乱,`HTML_Format`类可能包含方法来自动整理代码的缩进、换行,使其符合一定的编码规范。 2. **标签闭合检查**:HTML标签需要正确地成对出现...

    ch-hs-format:CircuitHub的Haskell源代码格式化程序-Form source code

    【标题】"CircuitHub的Haskell源代码格式化程序 - Form Source Code" 【描述】"CircuitHub的Haskell源代码格式化程序"是一款专为Haskell编程语言设计的代码美化工具,它旨在帮助开发者统一和规范项目中的代码风格,...

    DELPHI7代码格式化

    它能够帮助开发者自动整理和美化代码,使其更符合编程规范,提高代码可读性和团队协作效率。在Delphi 7中,通过按下快捷键Ctrl+D,可以快速启动代码格式化功能。 这个工具可能是一个第三方插件,因为文件列表中包含...

    源代码格式化软件(各种变成语言)

    源代码格式化器可以按照这些指南对代码进行整理,包括但不限于缩进风格(使用空格还是制表符,缩进的宽度)、括号的位置(K&R风格还是Allman风格)、注释的格式等。 2. **提高效率**:手动调整大量代码的格式是一项...

    vscode-spotless-gradle:一个VS Code扩展,用于使用Spotless&Gradle整理和格式化源文件

    产品特点提供诊断以显示无效格式(具有快速修复) 提供一尘不染的fixAll代码操作( Format on Save ) 提供一尘不染的格式化程序( Format Document ) 支持Spotless支持的所有语言。要求 用法使用此扩展之前,请...

    整理adobe flex代码格式的插件

    这意味着插件提供了一个便捷的操作方式,开发者无需离开IDE就能快速整理代码结构,如缩进、换行、括号对齐等。这对于频繁编写和修改ActionScript代码的开发者来说,是一个非常实用的功能。 根据提供的文件名,我们...

    svg-formatter:格式化SVG源代码的工具-Form source code

    SVG格式在网页设计、图标制作以及应用程序开发中广泛使用。"svg-formatter"是一个专为格式化SVG源代码而设计的工具,它能够帮助开发者整理和美化SVG代码,使其更易读、易维护。 "SVG图标化器"是svg-formatter的别名...

    VBA代码格式化工具 (1).zip

    "VBE Code Format"可能是这样一个工具,它可能提供了上述的一些或所有功能,以帮助用户更好地管理和优化他们的VBA代码。通过使用这样的工具,开发者可以将更多精力放在解决问题和创新上,而不是花费大量时间手动调整...

    LuaFormatter:Lua的代码格式化程序

    LuaFormatter是一款专为Lua编程语言设计的代码格式化工具,它的主要目标是帮助开发者将杂乱无章的Lua源代码整理成统一、整洁的格式,提高代码的可读性和团队协作效率。在软件工程中,代码格式化器扮演着重要的角色,...

    Atom-atom-elixir-formatter,Atom编辑器的Elixir源代码格式化程序。对rgreenjr/atom的贡献.zip

    使用该插件时,用户可以在Elixir文件中按下预设的快捷键(例如`Alt+Shift+F`,具体快捷键可能因系统和配置不同而异)或者通过右键菜单选择“Format Code”来触发格式化操作。插件会自动分析代码,并根据Elixir的代码...

    Fasm ----Win32汇编专题

    标题和描述中提到的知识点包括FASM的基本概念、Win32汇编编程的基础知识、PE文件格式、Win32程序的运行机制和内存模式以及Windows API的相关使用方法。 首先,FASM(Flat Assembler)是一个汇编语言编译器,它以其...

    z80formatter:格式化z80源代码,有点像-Form source code

    Z80Formatter是一款专为Z80汇编语言设计的源代码格式化工具,它的功能类似于C/C++等高级语言中的`-Form`或`format`命令,用于整理和美化代码布局,提升代码可读性。Z80汇编是一种低级编程语言,常用于早期的个人...

    javascript&html格式化工具

    4. **注释整理**:整理代码中的注释,使其格式化,比如将多行注释转换为标准格式。 5. **HTML标签闭合**:自动添加或移除缺失的HTML标签,保证代码的规范性。 6. **CSS和JavaScript内联样式处理**:对嵌入在HTML中...

    java中常用日语词汇

    * ソースコード (source code):软件应用程序的源代码。 其他相关词汇: * ブラウザー (browser):网页浏览器的统称。 * クロスコンパイル (crosscompile):跨平台编译或移植软件应用程序。 * ツール (tool):软件...

    工作中经常用到的android开发代码2

    ### 工作中经常用到的Android开发代码2 #### 1. 退出程序对话框提示 当用户尝试退出应用程序时,通常会弹出一个对话框来确认用户的操作。这可以防止用户意外地关闭应用。以下是一个简单的示例: ```java @...

Global site tag (gtag.js) - Google Analytics