java利用時間格式生成唯一文件名的方法
前言
有時候我們需要截圖,在要截圖時,有人用到了時間格式,但是時間格式中的:在文件名稱中是不被允許的字符,所以就會報錯,如何生成唯一的時間文件名:
示例代碼
package com.demo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class TimeString { private String valueOfString(String str, int len) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < len - str.length(); i++) { sb.append("0"); } return (sb.length() == 0) ? (str) : (sb.toString() + str); } public String getDateFormat(){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format(new Date()); } public Date getDateFormat(String time){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return df.parse(time); } catch (ParseException e) { e.printStackTrace(); } return null; } private String getTimeString(Calendar calendar) { StringBuffer sb = new StringBuffer(); 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)); return sb.toString(); } public String getTimeString(String time){ Calendar calendar = new GregorianCalendar(); calendar.setTime(this.getDateFormat(time)); return this.getTimeString(calendar); } public String getTimeString(){ Calendar calendar = new GregorianCalendar(); return this.getTimeString(calendar); } public static void main(String[] args) { TimeString ts = new TimeString(); System.out.println(ts.getTimeString()); System.out.println(ts.getTimeString("2015-4-30 8:51:52")); } }
雖然上面的getTimeString方法精確到了毫秒,但仍會有可能產(chǎn)生相同的文件名,導致覆蓋,所以,在生成文件名時判斷一下是否存在:
package com.demo; import java.io.File; public class Test16 { public String getFileName(String path){ File file = new File(path); if(file.exists()){ return this.getFileName(file.getParent()+File.separator+(new TimeString().getTimeString())+".png"); } return path; } public static void main(String[] args) { Test16 t = new Test16(); System.out.println(t.getFileName("D:/1.txt")); } }
理論上來說,這種也是有可能產(chǎn)生相同的文件名的,這種在多線程中是有可能的,解決的辦法很簡單,自已動腦筋想想想去吧!
總結(jié)
以上就是關(guān)于JAVA中通過時間格式來生成唯一文件名的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
Kafka常用命令之kafka-console-consumer.sh解讀
這篇文章主要介紹了Kafka常用命令之kafka-console-consumer.sh解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03spring啟動錯誤Singleton bean creation not al
本文主要介紹了spring啟動錯誤Singleton bean creation not allowed while the singletons of this factory are indestruction,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07springboot + mybatis-plus實現(xiàn)多表聯(lián)合查詢功能(注解方式)
這篇文章主要介紹了springboot + mybatis-plus實現(xiàn)多表聯(lián)合查詢功能,是最簡單的一種注解方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

SpringBoot自定義定時任務(wù)的實現(xiàn)示例

Spring?AOP實現(xiàn)多數(shù)據(jù)源動態(tài)切換