欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java利用时间格式生成唯一文件名的方法

程序员文章站 2024-03-31 19:33:28
前言 有时候我们需要截图,在要截图时,有人用到了时间格式,但是时间格式中的:在文件名称中是不被允许的字符,所以就会报错,如何生成唯一的时间文件名: 示例代码...

前言

有时候我们需要截图,在要截图时,有人用到了时间格式,但是时间格式中的:在文件名称中是不被允许的字符,所以就会报错,如何生成唯一的时间文件名:

示例代码

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方法精确到了毫秒,但仍会有可能产生相同的文件名,导致覆盖,所以,在生成文件名时判断一下是否存在:

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"));
  }
 
}

理论上来说,这种也是有可能产生相同的文件名的,这种在多线程中是有可能的,解决的办法很简单,自已动脑筋想想想去吧!

总结

以上就是关于java中通过时间格式来生成唯一文件名的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。