首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Java订单号(时间添流水号)

2012-11-04 
Java订单号(时间加流水号)package com.xmobo.demoimport java.io.BufferedReaderimport java.io.Buffere

Java订单号(时间加流水号)

package com.xmobo.demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.TimeUnit;public class Test01 {public static void main(String[] args) throws InterruptedException {SerialNumber serial = new FileEveryDaySerialNumber(5, "EveryDaySerialNumber.dat");while (true) {System.out.println(serial.getSerialNumber());TimeUnit.SECONDS.sleep(2);}}}abstract class SerialNumber {public synchronized String getSerialNumber() {return process();}protected abstract String process();}abstract class EveryDaySerialNumber extends SerialNumber {protected final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");protected DecimalFormat df = null;public EveryDaySerialNumber(int width) {if (width < 1) {throw new IllegalArgumentException("Parameter length must be great than 1!");}char[] chs = new char[width];for (int i = 0; i < width; i++) {chs[i] = '0';}df = new DecimalFormat(new String(chs));}protected String process() {Date date = new Date();int n = getOrUpdateNumber(date, 1);return format(date) + format(n);}protected String format(Date date) {return sdf.format(date);}protected String format(int num) {return df.format(num);}protected abstract int getOrUpdateNumber(Date current, int start);}class FileEveryDaySerialNumber extends EveryDaySerialNumber {private File file = null;private final static String FIELD_SEPARATOR = ",";public FileEveryDaySerialNumber(int width, String filename) {super(width);file = new File(filename);}@Overrideprotected int getOrUpdateNumber(Date current, int start) {String date = format(current);int num = start;if (file.exists()) {List<String> list = FileUtil.readList(file);String[] data = list.get(0).split(FIELD_SEPARATOR);if (date.equals(data[0])) {num = Integer.parseInt(data[1]);}}FileUtil.rewrite(file, date + FIELD_SEPARATOR + (num + 1));return num;}}class FileUtil {public static void rewrite(File file, String data) {BufferedWriter bw = null;try {bw = new BufferedWriter(new FileWriter(file));bw.write(data);} catch (IOException e) {e.printStackTrace();} finally {if (bw != null) {try {bw.close();} catch (IOException e) {e.printStackTrace();}}}}public static List<String> readList(File file) {BufferedReader br = null;List<String> data = new ArrayList<String>();try {br = new BufferedReader(new FileReader(file));for (String str = null; (str = br.readLine()) != null;) {data.add(str);}} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}return data;}}

注意:代码中有个叫EveryDaySerialNumber.dat,可以自行创建这样的文件,然后放到项目的根目录下就可以。此文件主要是用于记录上一次执行程序的节点。


热点排行