基于命令行的java应用程序样例
来源:互联网 发布:网络大电影排行榜 编辑:程序博客网 时间:2024/05/19 13:27
背景
在学习io的时候,都会讲到标准输入输出的东西。这里将最容易出现的几个问题整理一下,方便以后的使用和参考。
命令行程序的特点:
命令行参数解析
从System.in中按每行进行数据读取
程序示例
我们先给出一个最简单的例子,然后加入变化。
原始
这个例子实现了一个读取Systrem.in的每一行,并处理第一行的小程序(我们的处理方式就是把它们都打印出来)。
import java.io.*;import wy.tools.log.P;import wy.tools.regexp.Regexp;public class ReadLineFromSystemIn {/** * 从System.in中读取每行 * @param args */public static void main(String[] args) {InputStreamReader isr = new InputStreamReader(System.in);BufferedReader bis = new BufferedReader(isr);//转成buffered才有读行的能力String s;try {s = bis.readLine();while(null != s) {handleLine(s);s = bis.readLine();}} catch (IOException e) {e.printStackTrace();} finally {try {bis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static void handleLine(String s) {P.rintln("read line:" + s);}}
这里有个要说明的地方就是关于流的关闭问题,应该写在finally中来确保一定会被执行,如果写一try中可以会由于前面代码出现异常后没有执行close,程序不断的进行这个流程应会不断的吞噬系统资源,后果严重。
变化1 如果输入exit程序自动结束
private static void handleLine(String s) {if (Regexp.isMatch("exit", s))closeApp();P.rintln("read line:" + s);}private static void closeApp() {System.exit(0);}
需要将handleLine进行修改,使用System.exit(0)表示程序主动的正常退出。
变化2 加入行号的读取功能
public static void main(String[] args) {InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);//转成buffered才有读行的能力LineNumberReader lnr = new LineNumberReader(br); //支持行号读取的装饰器String s;try {s = lnr.readLine();int lineNumber = lnr.getLineNumber();while(null != s) {handleLine(s,lineNumber);s = lnr.readLine();lineNumber = lnr.getLineNumber();}} catch (IOException e) {e.printStackTrace();} finally {try {lnr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static void handleLine(String s, int lineNumber) {if (Regexp.isMatch("exit", s))closeApp();P.rintln("read line " + lineNumber + ": " + s);}
读取行号就要使用LineNumberReader装饰器,里面提供了getLineNumber()的方法。
注意:系统每调用一次readLine()会自动加行号,所以在readLine之后调用就可心得到从1开始的行号。
如何测试cmd-line程序
可以参考【怎么测试】1. 如何测试命令行程序?
- 基于命令行的java应用程序样例
- 基于对话框的应用程序也可以有命令行输出窗口
- 基于Java I/O的应用程序实验
- 基于GUI的应用程序
- 基于 Win32 的应用程序
- 基于gstreamer的应用程序
- 基于文档的应用程序
- 论基于java的web应用程序的性能测试
- 论基于java的web应用程序的性能测试
- 论基于java的web应用程序的性能测试
- J2EE基于SWT和Java Web Start的应用程序解决方案
- 基于SWT和Java Web Start的应用程序解决方案
- 基于NetBeans的Java EE客户端应用程序(一)
- 基于NetBeans的Java EE客户端应用程序(二)
- 基于NetBeans的Java EE客户端应用程序(二)
- 基于NetBeans的Java EE客户端应用程序(一)
- 基于NetBeans的Java EE客户端应用程序(二)
- 基于NetBeans的Java EE客户端应用程序(一)
- [查好友ios1.0版发布总结V]开发流程规范化
- Java中的Set与hashCode
- Safari各版本的Javascript调试功能
- FireBug 调试JS入门 —如何调试javascript
- 未解决的问题:log4j总是在加载的时候
- 基于命令行的java应用程序样例
- 河海大学X-GIS研究组开博辞
- 1948-2006:哈佛大学地理系的灭亡与地理学的重生
- SQL 获取汉字笔画数
- 基于Proteus的ARM7 LPC21XX学习笔记一、在Realview MDK 4.12下新建一个项目文件
- 基于Proteus的ARM7 LPC21XX学习笔记二、在proteus 7.7 sp2下新建一个电路仿真文件
- 基于Proteus的ARM7 LPC21XX学习笔记三、GPIO输出实例
- Read the value of a cookie in Jmeter
- AForge 使用 Grayscale 功能 (C#)