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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值