电脑
myeclipse或者intellij IDEA
打开myeclipse file --》new--》web project 具体操作如下图所示:
第一步:实现思路。1、首先获取年月日将日期格式化为自己需要的格式。2、按4到6位的序号+当前年月日存储到数据库或者文件中(理论上文件的读取效率更高,在操作比较频繁的情况下使用文件更合适)3、每次读取时判断日期是否相同如果不同更新日期,并将序号重置。(保证每个年月日的单号都是从初始化的“00001”这样开始)
第二步:文件的读写工具类FileUtil1、实现存储文件生成文件的方法rewrite2、实现读取dat文件的方法readList3、具体代码如下: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.util.ArrayList;import java.util.List;public 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
第三步:生成存储订单号。1、主抽象类SerialNumberpublic abstract class SerialNumber { public synchronized String getSerialNumber() { return process(); } protected abstract String process();}2、抽象继承类EveryDaySerialNumber import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.Date;public 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); } /** * 获得序列号,同时更新持久化存储中的序列 * * @param current * 当前的日期 * @param start * 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);}
第四步:逻辑功能类FileEveryDaySerialNumberimport java.io.File;import java.util.Date;import java.util.List;import order.EveryDaySerialNumber;public 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
第一步:编写功能测试代码。import java.util.concurrent.TimeUnit;/** * JAVA版本的自动生成有规则的订单号(或编号) 生成的格式是: 2 前面几位为当前的日期,后面五位为系统自增长类型的编号 原理: * 1.获取当前日期格式化值; 2.读取文件,上次编号的值+1最为当前此次编号的值 (新的一天会重新从1开始编号) */public class TestOrderNo { public static void main(String[] args) throws InterruptedException { SerialNumber serial = new FileEveryDaySerialNumber(5, 'SerialOrder.dat'); while (true) { System.out.println(serial.getSerialNumber()); TimeUnit.SECONDS.sleep(2); } }}
第二步:执行main方法。测试结果如下下图所示:(生成的SerialOrder.dat文件默认在当前项目下)
jdk1.6 myeclipse2010
获取dat文件内容可是使用for循环替换while循环:for (String str = null; (str = br.readLine()) != null;) { data.add(str); }