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 的相关文章

  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o

随机推荐

  • 一文搞懂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