java main 参数解析_Java Main参数解析(Args4j)
最近实现一个工具,Main函数会有很多参数,而且参数类型不同,为了统一解析,网上找到三方工具类Args4j,轻松搞定。
代码实例如下:
定义解析类:
import java.io.File
import org.kohsuke.args4j.Option
import org.slf4j.LoggerFactory
/**
* 数据库报表生成命令行参数定义
*
* @author BarryWang create at 2018/6/23 20:21
* @version 0.0.1
*/
class ArgOptions {
val logger= LoggerFactory.getLogger(classOf[ArgOptions])
/**
* 对象名及查询SQL脚本对,中间用英文分号":"隔开
*/
val query = new scala.collection.mutable.ListBuffer[(String, String, String)];
@Option(name = "-q",
aliases = Array("-query"),
metaVar = "::",
usage = "对象名及查询SQL脚本对,中间用英文分号“:”隔开, 例如database:objectName:sql。(String)")
def setProperty(property: String): Unit = {
var arr = property.split(":")
arr.length match {
case 3 => query.+=((arr(0), arr(1), arr(2)))
case _ => logger.info("-query 传入参数格式错误, 正确格式: ::")
}
}
/**
* JXLS Excel模板文件绝对路径
*/
@Option(name = "-t",
aliases = Array("-template"),
metaVar = "",
usage = "JXLS Excel模板文件绝对路径, 请参考:http://jxls.sourceforge.net/reference/simple_exporter.html。(File)" )
var template: File = null
/**
* Scala脚本文件
*/
@Option(name = "-s",
aliases = Array("-script"),
metaVar = "",
usage = "Scala脚本文件, 请参考:http://ammonite.io/#ScalaScripts。(String)")
var script: String = null
/**
* 输出Excel文件
*/
@Option(name = "-o",
aliases = Array("-output"),
/* required = true,handler = classOf[StringArrayOptionHandler],*/
metaVar = "",
usage = "输出Excel文件绝对路径。(File)")
var output: String = null
/**
* 输出Excel文件
*/
@Option(name = "-m",
aliases = Array("-mailto"),
metaVar = "",
usage = "生成报表发送邮箱,多个使用英文分号“;”分割。(String)")
var email: String = null
/**
* 邮件主题
*/
@Option(name = "-sub",
aliases = Array("-subject"),
metaVar = "",
usage = "邮件主题。(String)")
var subject: String = null
}
引用解析类如下:
import java.io.File
import java.util.Date
import com.today.dbreport.action.impl.{GenReportByScriptAction, GenReportBySqlAction, GenReportByTemplateBySqlAction}
import com.today.dbreport.dto.GenReportParam
import com.today.dbreport.utils.EmailUtil
import com.today.service.commons.util.DateTools
import org.kohsuke.args4j.CmdLineParser
import org.slf4j.LoggerFactory
import scala.collection.JavaConverters._
/**
* 生成报表入口
*
* @author BarryWang create at 2018/6/1 11:02
* @version 0.0.1
*/
object Main {
val logger= LoggerFactory.getLogger(Main.getClass)
def main(args: Array[String]): Unit = {
val options = new ArgOptions
val parser = new CmdLineParser(options)
// print usage
parser.printUsage(System.out)
parser.parseArgument(args.toList.asJava)
//输出文件或发送邮件必填一个
if(options.output == null && options.email == null){
println("请传入参数-output 或 -mailto其中之一")
return
}
//生成报表地址
var utf8Output = ""
if (options.output != null) {
utf8Output = new String(options.output.getBytes("UTF-8"), "UTF-8")
} else {//本地临时文件
val currentTime = DateTools.format(new Date(), "yyyyMMddHHmmssSSS")
val outDir = s"${System.getProperty("user.dir")}${File.separator}output"
var outputDir = new File(outDir)
if(!outputDir.exists()){
outputDir.mkdirs()
}
utf8Output = s"${outDir}${File.separator}${currentTime}.xlsx"
}
//带有Scala脚本
if (options.script != null) {
var templateOptional: Option[File] = None
if (options.template != null) {
templateOptional = Some(options.template)
}
val scriptOptional = Some(options.script)
var mailtoOptional: Option[String] = None
if (options.email != null) {
mailtoOptional = Some(options.email)
}
val genReportParam = new GenReportParam(options.query, utf8Output, templateOptional, scriptOptional, mailtoOptional)
//sql + script + jxls template
//script + jxls tempalte
new GenReportByScriptAction(genReportParam).execute
} else {//无Scala脚本
var templateOptional: Option[File] = None
if (options.template != null){
templateOptional = Some(options.template)
}
var scriptOptional : Option[String] = None
if(options.script != null){
scriptOptional = Some(options.script)
}
var mailtoOptional: Option[String] = None
if (options.email != null){
mailtoOptional = Some(options.email)
}
val genReportParam = new GenReportParam(options.query, utf8Output, templateOptional, scriptOptional, mailtoOptional)
if (options.template != null) { //sql* + jxls template
new GenReportByTemplateBySqlAction(genReportParam).execute
} else { //no template + sql
new GenReportBySqlAction(genReportParam).execute
}
}
println(s"报表生成成功${utf8Output}!")
//发送邮件
if (options.email != null) {
var subject = "报表工具生成报表"
if(options.subject != null){
subject = options.subject
}
EmailUtil.sendEmail(options.email.trim, subject, "生成报表请参考附件", utf8Output)
println("邮件发送成功,请邮件附件下载相关报表!")
//邮件发送成功, 删除本地临时文件
if (options.output == null) {
new File(utf8Output).deleteOnExit()
}
}
logger.info(s"报表生成成功${utf8Output}")
}
}
原文:https://www.cnblogs.com/barrywxx/p/9976543.html
java main 参数解析_Java Main参数解析(Args4j)相关推荐
- java main 命令行_java Main 命令行
CLI 即Command Line Interface,也就是"命令行接口",它为Java 程序访问和解析命令行参数提供了一种统一的接口. apache Commons CLI为用 ...
- java 三个点_Java,参数中的3个点
是瓦拉格斯 :) varargs是可变长度参数的缩写,它允许方法接受可变数量的参数(0或更多).使用varargs,创建需要使用可变数量参数的方法变得非常简单.在Java 5中添加了变量参数的特性. ...
- Java参数变量_Java变量参数
Java1.5添加新功能:可变参数:它适用于参数不确定性的数量,判断形势的类型.java变量参数数组操作. 特点: 1.今天的参数列表只能持续. 2.省略号(...)位于变量类型和变量名之间,前后有无 ...
- java main函数写法_java main()函数
Java中的main()方法详解 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方 ...
- java带参构造函数_Java 带参数的构造函数
Java 带参数的构造函数 接下来,我们准备为大家介绍"带参数的构造函数". 那么,我们为什么要使用带有参数的构造函数呢? 首先,我们可以举一个例子,例如:在一个游戏里面,假设它有 ...
- linux java main 参数设置_Java虚拟机参数设置
"MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remai ...
- java中对字符串进行解析_Java中字符串解析
1.字符串不属于基本数据类型(基本数据类型有[byte,int,char,float,double,boolean,short,long]),字符串由单个或多个字符组成,本质上是字符数组,Java中提 ...
- java的无参构造函数_Java 无参数构造函数的应用
创建类时指定了有参数构造函数后,系统默认不会创建无参数构造函数,需要自己手动创建. 创建子类的对象实例时,默认会先调用父类的无参数的构造函数(默认构造函数). 若父类未定义无参数构造函数,则在编译阶段 ...
- java xml dom4j 解析_Java使用DOM4J解析XML
Dom4J方式解析XML文件.dom4j是非官方提供的xml文件解析方式,因此需要去第三方下载dom4j的jar包 File file = new File("D:\\chengmuzhe\ ...
- java jdbc 传参_java – 将参数传递给JDBC PreparedStatement
我正在尝试为我的程序制作验证课程.我已经建立了与 MySQL数据库的连接,我已经在表中插入了行.该表由firstName,lastName和userID字段组成.现在我想通过构造函数的参数在数据库中选 ...
最新文章
- PyQt5+python3+pycharm开发环境配置
- [读书笔记]C#学习笔记三: C#类型详解..
- 烟袋斜街-后海,印象已模糊
- 苏老师首播3小时!超500人观看!录屏!源码!PPT……你要的都在这里!
- 用Hystrix保护您的应用程序
- 不同操作系统上屏蔽oracle的操作系统认证方式
- Linux超简单文本编辑器:nano
- 40Linux组41Linux所有者42Linux所在组43Linux修改所有组
- 现在小餐厅的推广视频
- CentOS7.3下部署Rsyslog+LogAnalyzer+MySQL中央日志服务器
- PDF超过6000页,OMG,学它
- SLAM无人车通过上摄像头扫描二维码重定位
- linux监测服务日志脚本,LINUX下的一个性能监测脚本
- QCC3008项目实战:BlueVest体感背心
- 【系统辨识】初识系统辨识,学习这个的目的
- oracle误删除数据之后的恢复方法
- LTE通信系统的网络拓扑结构(4G)
- android父布局的右侧,相对布局(RelativeLayout)的控件运用
- 计量经济学计算机第1章习题,计量经济学第1章习题.pdf
- 安装原生Win7-SP1系统
热门文章
- Mac 生成ico图标
- 黑科技网站推荐 第一弹 RemoveBg [一键抠图]
- 【不忘初心】Win10 20H2 19042.964_X64_四合一太阳谷图标_[纯净精简版][2.83G](2021.5.1)
- 爬虫豆瓣top250代码
- A N S I五个预定义的宏名
- FFmpeg无损转换ts为mp4
- LabVIEW编程LabVIEW开发1920 LCR仪表例程与相关资料
- android camera2美颜,Nano Camera(多功能美颜相机)V2.1 安卓版
- Python之温度换算
- 怎么提高,芝麻信用分到750