Java Main参数解析(Args4j)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Main参数解析(Args4j),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4796字,纯文字阅读大概需要7分钟。
内容图文
最近实现一个工具,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 = "<db>:<objectName>:<sql>",
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 传入参数格式错误, 正确格式: <db>:<objectName>:<sql>")
}
}
/**
* JXLS Excel模板文件绝对路径
*/
@Option(name = "-t",
aliases = Array("-template"),
metaVar = "<template file>",
usage = "JXLS Excel模板文件绝对路径, 请参考:http://jxls.sourceforge.net/reference/simple_exporter.html。(File)" )
var template: File = null
/**
* Scala脚本文件
*/
@Option(name = "-s",
aliases = Array("-script"),
metaVar = "<scala script file path>",
usage = "Scala脚本文件, 请参考:http://ammonite.io/#ScalaScripts。(String)")
var script: String = null
/**
* 输出Excel文件
*/
@Option(name = "-o",
aliases = Array("-output"),
/* required = true,handler = classOf[StringArrayOptionHandler],*/
metaVar = "<output excel file>",
usage = "输出Excel文件绝对路径。(File)")
var output: String = null
/**
* 输出Excel文件
*/
@Option(name = "-m",
aliases = Array("-mailto"),
metaVar = "<email>",
usage = "生成报表发送邮箱,多个使用英文分号“;”分割。(String)")
var email: String = null
/**
* 邮件主题
*/
@Option(name = "-sub",
aliases = Array("-subject"),
metaVar = "<subject>",
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参数解析(Args4j)全部内容,希望文章能够帮你解决Java Main参数解析(Args4j)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。