`

添加JAVA源代码文件licence信息头

阅读更多
原文件来自http://yangshangchuan.iteye.com/blog/1841150
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.apdplat.platform.util;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 给JAVA源代码文件统一地添加licence信息头
 * 检查文件package、import、类级别注释、是否有public class
 * 用到了Java7的新特性,强大
 * @author ysc
 */
public class AddLicenceForJavaFile {
    private static int count = 0;
    private static List<String> fail = new ArrayList<>();
    private static List<String> wrong = new ArrayList<>();

    public static void main(String[] args) {
        String licence="/**\n" +
" * Licensed to the Apache Software Foundation (ASF) under one or more\n" +
" * contributor license agreements.  See the NOTICE file distributed with\n" +
" * this work for additional information regarding copyright ownership.\n" +
" * The ASF licenses this file to You under the Apache License, Version 2.0\n" +
" * (the \"License\"); you may not use this file except in compliance with\n" +
" * the License.  You may obtain a copy of the License at\n" +
" *\n" +
" *     http://www.apache.org/licenses/LICENSE-2.0\n" +
" *\n" +
" * Unless required by applicable law or agreed to in writing, software\n" +
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
" * See the License for the specific language governing permissions and\n" +
" * limitations under the License.\n" +
" */";
        addLicenceForJavaFile(new File("D:\\Workspaces\\NetBeansProjects\\APDPlat"),licence);
        System.out.println("为 "+count+" 个Java源代码文件添加licence信息头");
        if(fail.size()>0){
            System.out.println("处理失败个数 "+fail.size());
            for(String f : fail){
                System.out.println("        "+f);
            }
        }
        if(wrong.size()>0){
            System.out.println("JAVA源代码错误个数 "+wrong.size());
            for(String w : wrong){
                System.out.println("        "+w);
            }
        }
    }
    /**
     * 给JAVA源代码文件统一地添加licence信息头
     * @param path 源码所处的根目录
     * @param licence 许可证信息(在netbeans中复制一段文本粘贴到变量的双引号内,IDE自动格式化,相当赞)
     */
    private static void addLicenceForJavaFile(File path, String licence) {
        if (path != null && path.exists()) {
            //处理文件夹
            if (path.isDirectory()) {
                String[] children = path.list();
                for (int i = 0; i < children.length; i++) {
                    File child = new File(path.getPath() + System.getProperty("file.separator") + children[i]);
                    //递归处理
                    addLicenceForJavaFile(child, licence);
                }
            } else {
                //处理java文件
                if (path.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(path.getAbsolutePath());
                    count++;
                    try {
                        byte[] content;
                        try (RandomAccessFile f = new RandomAccessFile(path, "rw")) {
                            content = new byte[ (int) f.length()];
                            f.readFully(content);
                        }
                        String text = new String(content);
                        text = text.trim();
                        while (text.startsWith("/n")) {
                            text = text.substring(1);
                        }
                        //如果已经有同样的licence,则忽略
                        int pos = text.indexOf(licence);
                        if(pos!=-1){
                            return;
                        }
                        //有package声明的,保留package以后的内容
                        if (text.indexOf("package") != -1) {
                            text = text.substring(text.indexOf("package"));
                        }
                        //没有package声明的,有import声明的,保留import以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") != -1) {
                            text = text.substring(text.indexOf("import"));
                        }
                        //没有package声明也没有import声明的,有类级别注释的,则保留类级别注释以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") == -1 && text.indexOf("/**") != -1 && text.indexOf("public class") != -1 && text.indexOf("/**")<text.indexOf("public class") ) {
                            text = text.substring(text.indexOf("/**"));
                        }
                        //没有package声明也没有import声明的,也没有类级别注释的则保留public class以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") == -1 && text.indexOf("public class") != -1 && ( text.indexOf("/**")>text.indexOf("public class") || text.indexOf("/**")==-1 )) {
                            text = text.substring(text.indexOf("public class"));
                        }else{
                            wrong.add(path.getAbsolutePath());
                            return;
                        }
                        try (FileWriter writer = new FileWriter(path)) {
                            writer.write(licence);
                            writer.write("\n\n");
                            writer.write(text);
                        }
                    }
                    catch (Exception ex) {
                        fail.add(path.getAbsolutePath());
                    }
                }
            }
        }
    }
}
分享到:
评论

相关推荐

    aspose-words添加word水印的jar包,licence文件,实例代码

    `licence文件`通常是指Aspose的产品许可证文件,它包含了授权信息,确保用户合法地使用Aspose.Words库。在实际项目中,需要将这个文件放置在正确的位置,以避免运行时出现许可验证错误。 提供的`实例代码`可能是...

    ical4j-1.0.3-src

    ical4j-1.0.3-src是一个源代码包,包含了ical4j库的源代码,以及可能包含的jar文件,便于开发者进行深入学习、定制或扩展。 源代码的提供对于开发者来说具有以下关键价值: 1. 可读性:源代码使得开发者能够直接...

    licence-manager:用于为源文件创建许可证标头的小型实用程序

    "licence-manager" 是一个工具,它的主要功能是为源代码文件添加许可证标头。这个小工具能够帮助开发者轻松地管理和统一他们在项目中的许可证信息,确保所有源文件都符合特定的许可协议。 **描述分析:** 描述简单...

    artnet-java:Art-Net照明协议的Java端口

    1. **源代码**:Java源文件通常以`.java`为扩展名,包含了实现Art-Net协议的类和方法。可能有如`ArtNetPacket`、`ArtNetController`等核心类,用于构建和解析Art-Net数据包。 2. **构建文件**:可能是`build.gradle...

    whereis软件

    "whereis软件"是一款专为IT专业人士设计的代码检索工具,其主要功能是帮助开发者快速定位项目中的源代码文件。这款软件的特点在于它的简洁性和易用性,使得用户能够高效地在大量的代码库中找到所需的部分。由于...

    eclipse maven环境操作步骤1

    2. 添加内容到这些文件,比如`key.txt`可以包含密钥信息,`licence`文件可以包含许可证数据。 完成以上步骤后,你的Eclipse Maven项目就已经配置好了。现在,你可以使用Maven命令来构建、测试和打包项目。在Eclipse...

    jfreechart官方demo

    运行这个jar文件,可以看到各种类型的图表实例,同时也可以查看源代码,深入理解其背后的实现机制。 3. **NEWS**: 新闻或更新文件,通常会列出最近版本的重要改动和新增功能。这对于跟踪JFreeChart的最新发展和决定...

    JSPGenCMS3_20100820.rarj

    最后,"JSPGenCMS3"可能包含GenCMS的源代码和配置文件。通过查看和学习这些源码,开发者可以深入理解系统的工作原理,对其进行自定义开发或二次开发。 总结来说,"JSPGenCMS3_20100820.rarj"是一个包含JSPGenCMS3.0...

    wabacus4.2_release

    对于Wabacus4.2,这表明软件遵循特定的开源许可协议,允许用户查看源代码并进行定制化。 2. **wabacus-4.2.jar**: 这是Wabacus软件的主要可执行文件,以Java Archive (JAR)格式封装。JAR文件是一个包含多个Java类和...

    网页解析工具HTMLCleaner

    4. **src**:源代码目录,可能包含HTMLCleaner的Java源文件。通过查看源码,开发者可以更深入地理解工具的工作原理,甚至对其进行二次开发。 5. **default.xml**:这可能是一个配置文件,用于设置HTMLCleaner的默认...

    Laja:用Java编写的组合代码生成器和解析器生成器-开源

    2. **透明度**:源代码的开放使得用户可以查看、审查和理解软件的工作原理,增加了软件的信任度。 3. **自由定制**:用户可以根据自己的需求修改和扩展Laja,以适应特定的项目或工作流程。 **组成部分** - **...

    Faltron Java Port Scanner-开源

    通过研究源代码,我们可以深入理解Java网络编程和多线程技术,同时也为网络安全领域的实践提供了实用工具。开源社区的共享精神使得这样的项目能够持续发展,为开发者带来无尽的学习和创新机会。

    Jfreechart

    `jfreechart.licence.txt` 文件则包含了JFreeChart的许可协议信息。JFreeChart遵循LGPL(Lesser General Public License)开源协议,这意味着它允许免费使用、修改和分发,但如果你修改了源代码并将其与自己的产品...

    htmlcleaner html解析器

    - `test` 和 `src` 目录:包含测试代码和源代码,供开发人员进行单元测试和查看源码。 - `config`:可能存放其他用户自定义的清理配置文件。 - `doc`:文档目录,可能包含API参考、用户指南等资料。 - `lib`:依赖库...

    jfreechart-1.0.10.jar包

    JFreeChart遵循LGPL(Lesser General Public License)协议,这意味着任何人都可以免费使用、修改和分发JFreeChart,但若在商业产品中使用,可能需要遵守一定的条件,例如公开源代码。 总结来说,`jfreechart-...

    jfreechart-1.0.11.jar

    标题"jfreechart-1.0.11.jar"表明这是JFreeChart库的一个版本,具体为1.0.11,它是一个可执行的Java档案文件,包含了JFreeChart库的所有源代码和资源,使得开发者能够将其集成到Java项目中,轻松创建高质量的可视化...

    Quality Complaint Management System-开源

    4. **link_data.java**:这是一个Java源代码文件,可能包含用于处理数据库连接或数据检索的代码。在质量投诉管理系统中,这样的文件对于正确地连接到数据库和获取事件数据至关重要。 5. **hsqldb_DB_erzeugen.sql**...

    JPhotoAlbum-开源

    它的开源性质意味着用户不仅可以免费使用,还能参与到软件的改进和创新中,而提供的各种配置文件和源代码则揭示了其内部工作原理和开发流程。对于喜欢自定义和探索软件的人来说,JPhotoAlbum是一个值得尝试的项目。

    Ajax RPG-开源

    3. `LICENCE.txt`, `CHANGELOG.txt`, `TODO.txt`, `COPYRIGHT.txt`: 这些文本文件提供了关于Ajax RPG的重要信息。`LICENCE.txt`包含软件的许可协议,定义了用户可以如何使用和分发软件;`CHANGELOG.txt`记录了软件的...

    GW2 Tools:GW2的一些工具-开源

    JAR(Java Archive)文件包含了所有必要的类文件和资源,使得用户可以直接运行工具,无需编译源代码。只需拥有Java运行环境,玩家就可以使用这个文件来启动GW2的辅助工具。 4. **LICENCE**: 许可证文件,它定义了GW...

Global site tag (gtag.js) - Google Analytics