java利用时间格式生成唯一文件名的方法
前言
有时候我们需要截图,在要截图时,有人用到了时间格式,但是时间格式中的:在文件名称中是不被允许的字符,所以就会报错,如何生成唯一的时间文件名:
示例代码
packagecom.demo; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.Calendar; importjava.util.Date; importjava.util.GregorianCalendar; publicclassTimeString{ privateStringvalueOfString(Stringstr,intlen){ StringBuffersb=newStringBuffer(); for(inti=0;i<len-str.length();i++){ sb.append("0"); } return(sb.length()==0)?(str):(sb.toString()+str); } publicStringgetDateFormat(){ SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndf.format(newDate()); } publicDategetDateFormat(Stringtime){ SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); try{ returndf.parse(time); }catch(ParseExceptione){ e.printStackTrace(); } returnnull; } privateStringgetTimeString(Calendarcalendar){ StringBuffersb=newStringBuffer(); sb.append(String.valueOf(calendar.get(Calendar.YEAR))) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.MONTH)+1),2)) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)),2)) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)),2)) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.MINUTE)),2)) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.SECOND)),2)) .append(this.valueOfString(String.valueOf(calendar.get(Calendar.MILLISECOND)),3)); returnsb.toString(); } publicStringgetTimeString(Stringtime){ Calendarcalendar=newGregorianCalendar(); calendar.setTime(this.getDateFormat(time)); returnthis.getTimeString(calendar); } publicStringgetTimeString(){ Calendarcalendar=newGregorianCalendar(); returnthis.getTimeString(calendar); } publicstaticvoidmain(String[]args){ TimeStringts=newTimeString(); System.out.println(ts.getTimeString()); System.out.println(ts.getTimeString("2015-4-308:51:52")); } }
虽然上面的getTimeString方法精确到了毫秒,但仍会有可能产生相同的文件名,导致覆盖,所以,在生成文件名时判断一下是否存在:
packagecom.demo; importjava.io.File; publicclassTest16{ publicStringgetFileName(Stringpath){ Filefile=newFile(path); if(file.exists()){ returnthis.getFileName(file.getParent()+File.separator+(newTimeString().getTimeString())+".png"); } returnpath; } publicstaticvoidmain(String[]args){ Test16t=newTest16(); System.out.println(t.getFileName("D:/1.txt")); } }
理论上来说,这种也是有可能产生相同的文件名的,这种在多线程中是有可能的,解决的办法很简单,自已动脑筋想想想去吧!
总结
以上就是关于JAVA中通过时间格式来生成唯一文件名的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。