JAVA代码添加License

2023-11-12

在开源代码的时候,我们经常会在代码顶部添加License信息,每个文件复制粘贴显然是比较麻烦的,我们可以在工具中进行配置,在创建新的类的时候自动为我们添加相关信息,以eclipse为例。

进入Preference->Java->Code Style->Code Template
这里写图片描述

在中间的面板中选择Comments->Files,然后单击Edit...按钮,在弹出的对话框中填写我们的License信息。
这里写图片描述

最后在我们创建新的JAVA类的时候需要勾选Generate comments

这里写图片描述

这样,我们新创建的文件就会自动添加License信息了。如果现存的一些历史文件,用上面的方法显然就不太好了,所以写了一个工具类方便为源码添加License部分,供大家参考,可以按照实际情况进行修改。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import org.junit.Test;

/**
 * License复制工具
 * 
 * @author jianggujin
 *
 */
public class LicenseCopyUtils implements FileFilter {
   /**
    * 读取License文件
    * 
    * @param in
    * @param charset
    * @return
    * @throws IOException
    */
   public String readLicenseHeader(InputStream in, String charset) throws IOException {
      BufferedReader reader = new BufferedReader(new InputStreamReader(in, charset));
      StringBuilder builder = new StringBuilder("/**\r\n");
      String line = null;
      while ((line = reader.readLine()) != null) {
         builder.append(" * ");
         builder.append(line);
         builder.append("\r\n");
      }
      builder.append(" */");
      return builder.toString();
   }

   /**
    * 处理license头部信息
    * 
    * @param root
    * @param in
    * @param charset
    * @throws IOException
    */
   public void processLicenseHeader(File root, InputStream in, String charset) throws IOException {
      System.out.println("开始读取并格式化license...");
      String headerBody = readLicenseHeader(in, charset);
      System.out.println(headerBody);
      System.out.println("读取并格式化license完成...");
      if (root.isDirectory() || root.getName().endsWith(".java")) {
         System.out.println("开始处理:" + root.getAbsolutePath());
         processLicenseHeader(root, charset, headerBody);
      }
   }

   private void processLicenseHeader(File root, String charset, String headerBody) throws IOException {
      if (root.isFile()) {
         System.out.println("开始读取并处理:" + root.getAbsolutePath());
         BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(root), charset));
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream, charset));
         writer.write(headerBody);
         writer.write("\r\n");
         String line = null;
         boolean body = false;
         while ((line = reader.readLine()) != null) {
            if (body || line.startsWith("package ") || line.startsWith("import ")) {
               body = true;
               writer.write(line);
               writer.write("\r\n");
            }
         }
         reader.close();
         writer.close();
         FileOutputStream out = new FileOutputStream(root);
         stream.writeTo(out);
         out.flush();
         out.close();
         System.out.println("读取并处理[" + root.getAbsolutePath() + "]完成");
      } else {
         File[] list = root.listFiles(this);
         if (list != null)
            for (File file : list) {
               processLicenseHeader(file, charset, headerBody);
            }
      }
   }

   @Override
   public boolean accept(File file) {
      return file.isDirectory() || file.getName().endsWith(".java");
   }

   @Test
   public void test() throws IOException {
      processLicenseHeader(new File("src/main/java"), new FileInputStream("license.txt"), "UTF-8");
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA代码添加License 的相关文章

随机推荐

  • 一文搞懂STM32 PWM配置

    本文主要介绍通过CubeMX对STM32G070CBT6进行配置生成PWM波 内容包括PWM的基本概念 PWM的应用 PWM产生的方法 STM32 PWM波配置详解 1 PWM PWM 英文名Pulse Width Modulation 是
  • 02-不得不了解的js特性

    一 回顾js特性 针对浏览器端js 它有哪些特性 弱类型 解释型 1 弱类型 所谓强类型 就意味着在声明变量的时候 需要确定数据类型 一经确定就不能改变 而弱类型 在声明变量的时候 是无需声明变量的类型 变量的类型有其值来决定 并且是可以随
  • 使用pyecharts出现 'ModuleNotFoundError: No module named 'pyecharts_snapshot' 异常

    使用pyecharts时 出现 ModuleNotFoundError No module named pyecharts snapshot 试了几次都无法解决 突然想到 pyecharts snapshot 会不会也是一个第三方库 毕竟异
  • MySQL 列属性修改操作

    1 mysql中修改字段长度 sql view plain copy ALTER TABLE tb article MODIFY COLUMN NAME VARCHAR 50 这里的tb article为表名 NAME为字段名 50为修改后
  • Vue 组件的单元测试

    1 基本的示例 单元测试是软件开发非常基础的一部分 单元测试会封闭执行最小化单元的代码 使得添加新功能和追踪问题更容易 Vue 的单文件组件使得为组件撰写隔离的单元测试这件事更加直接 它会让你更有信心地开发新特性而不破坏现有的实现 并帮助其
  • [docker]笔记-网络管理

    1 docker网络原理 docker安装完成后 会在宿主机中创建一个虚拟网桥 用于容器之间和容器与外部网络的连接 虚拟网桥通常名称为docker0 可以使用ip link show命令进行查看 在docker中 各个容器是通过这个dock
  • 虚拟+现实

    随着现代信息技术与软硬件技术的快速发展 嵌入式系统的功能日益强大 嵌入式设备和软件应用领域越来越宽泛 近年来 嵌入式软件代码量呈爆炸式增长 对测试的要求越来越高 尤其是涉及防务 航空 汽车等安全关键领域 半实物仿真测试系统的研制难度适中 投
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方I2C demo中功能的复现 进行相关内容的学习及探讨 实现功能 功能2 三轴加速度陀螺仪 MPU6050模块 硬件准备
  • Typora+PicGo-Core上传服务设置

    一 Typora中安装PicGo Core 二 安装插件 Win10为例 首先点击验证图片上传选项根据提示找到安装路径 我的路径为C Users 86137 AppData Roaming Typora picgo win64 picgo
  • Qt5.14版本通用环境配置安装——最详细教学(看不懂,你怪我)

    大家好 我是会飞的鱼 blog 今天我来给大家介绍一下Qt5 14 1安装 有不足之处 请大家多多指教 感谢大家支持 目录 前言 安装文件下载 安装 设置 QtCreator 编译路径 设置 Qt 源码路径 以上就是全部安装步骤 已经完成
  • moxa串口服务器型号,moxa串口服务器产品配置说明

    moxa串口服务器产品配置说明 内容精选 换一换 为弹性云服务器配置的安全组规则未生效 以下排查思路根据原因的出现概率进行排序 建议您从高频率原因往低频率原因排查 从而帮助您快速找到问题的原因 如果解决完某个可能原因仍未解决问题 请继续排查
  • 实现一个Android锁屏App的难点总结

    http blog csdn net ldld1717 article details 69389125 https segmentfault com a 1190000007157971 自定义一个漂亮实用的锁屏app 如果能赢得用户的认
  • 第一个汇编程序hello world

    近来 看了看以下汇编视频 终于学了第一个汇编程序 hello world 下面分享以下程序的各部分代码和注释 希望大家有所帮助 程序源码如下 assume cs code ds data 定义代码段和数据段框架 data segment 数
  • 由于找不到xinput1_3.dll,无法继续执行代码的解决方法都有哪些?

    关于由于找不到xinput1 3 dll 无法继续执行代码这个问题 其实在网上经常看别人提及 要解决这个问题 还是不难的 今天小编就来给大家详细的说说关于这个问题的解决方法吧 本文会介绍多种的修复方法 下面一起来看看 一 xinput1 3
  • ubuntu 安装Nginx 以及简单配置

    Nginx使用的地方特别多 很久以前就知道Nginx使用范围很广 却并不知道Nginx具体可以做什么 怎么使用 最近读了几篇关于Nginx的文章 对Nginx有了大致的了解 只看不练无法解决真正的问题 此处主要是Nginx的安装以及 Ngi
  • 常见异常汇总

    目录 登录异常 org apache ibatis binding BindingException Invalid bound statement not found com jt mapper UserMapper findUserBy
  • MyBatis<if>标签判断字符串相等写法

    mybatis 映射文件中 if标签判断字符串相等 两种方式 因为mybatis映射文件 是使用的ognl表达式 所以在判断字符串sex变量是否是字符串Y的时候 1
  • 【数据结构】栈的代码实现

    个人博客 www hellocode top 所有文章均在上方博客首发 其他平台同步更新 本文专栏 数据结构与算法 如有问题 欢迎指正 一起学习 文章参考整理自小码哥的 恋上数据结构和算法 课程 图片转载自课程PPT 如有侵权 请联系删除
  • shell命令

    1 系统信息 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS DMI hdparm i dev hda 罗列一个磁
  • JAVA代码添加License

    在开源代码的时候 我们经常会在代码顶部添加License信息 每个文件复制粘贴显然是比较麻烦的 我们可以在工具中进行配置 在创建新的类的时候自动为我们添加相关信息 以eclipse为例 进入Preference gt Java gt Cod