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

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中通过时间格式来生成唯一文件名的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • Java实现简单修改文件名的方法分析

    本文实例讲述了Java实现简单修改文件名的方法.分享给大家供大家参考,具体如下: 今天帮朋些个网站,做到商品上传的时候需要给文件重新设置名称,以前也做过类的功能,只是没有保存忘了,为了避免以后再重新找,就在此记录下,哈哈..... 例子一: import java.io.*; public class test1 { public static void main(String[] args) { File file=new File("D:/gai.jpg"); //指定文件名及路径

  • Java获取文件夹下所有文件名称的方法示例

    本文实例讲述了Java获取文件夹下所有文件名称的方法.分享给大家供大家参考,具体如下: import java.io.File; public class GetFoldFileNames { /** * * @author zdz8207 */ public static void main(String[] args) { getFileName(); } public static void getFileName() { String path = "G:/lxz/20130611&qu

  • java基于Apache FTP实现文件上传、下载、修改文件名、删除

    Apache FTP 是应用比较广泛的FTP上传客户端工具,它易于操作,代码简略,结构清晰,是做FTP文件客户端管理软件的优先之选.FTP的操作包括:FTP文件上传(断点续传).FTP文件下载.FTP文件重命名.FTP文件删除,这些操作已经将FTP应用管理的方式发挥的淋漓尽致了,So 我一直都用此种方式来实现FTP文件服务器的管理工作:下附FTP工具代码. 1.FTP文件操作状态枚举类 package com.scengine.wtms.utils.ftp; public enum FTPSta

  • 利用Java获取文件名、类名、方法名和行号的方法小结

    大家都知道,在C语言中,我们可以通过宏FILE. __LINE__来获取文件名和行号,而在Java语言中,则可以通过StackTraceElement类来获取文件名.类名.方法名.行号,具体代码如下: public static int getLineNumber( ){ StackTraceElement[] stackTrace = new Throwable().getStackTrace(); return stackTrace[1].getLineNumber( ); } public

  • Java批量修改文件名的实例代码

    复制代码 代码如下: import java.io.*; import java.util.*;public class Test { public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new FileReader("output1.txt"));        List<String> newName = new

  • java字符串切割实例学习(获取文件名)

    上传文件路径为:C:/Documents and Settings/collin/My Documents/111-lazyloading.gif,欲取出文件名:111-lazyloading.gif.可以 复制代码 代码如下: String temp[] = name.split("////");if (temp.length > 1) {name = temp[temp.length - 1];} regex为////,因为在java中//表示一个/,而regex中//也表示

  • Java实现读取文件夹下(包括子目录)所有文件的文件名

    在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. package src; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStrea

  • java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径

    java获取系统路径字体.得到某个目录下的所有文件名.获取当前路径 复制代码 代码如下: package com.liuxing.test; import java.awt.GraphicsEnvironment;import java.io.File;public class Test { private static GraphicsEnvironment environment; /**  * @param args  */ public static void main(String[]

  • java 文件名截取方法

    1.截取不带后缀的文件名 String resourceName=resourceSearchBean.getFileName(); if(StringHelper.isNotEmpty(resourceName)&&resourceName.length()>0); { int dot = resourceName.lastIndexOf('.'); if ((dot >-1) && (dot < (resourceName.length()))) {

  • java批量修改文件名的实现方法

     java批量修改文件名的实现方法 初次学习java,被java的灵活性和简洁的思路所吸引 需求: 看到java视频在播放器列表中的文件名很长,每次都需要拉长列表才能看清全名,故写此代码批量修改该文件夹下所有文件名 实现代码: import java.io.*; class filesRename { public static void main(String[] args) throws IOException { String str1 = new String("这里是需要删除的文件名前

  • JavaWeb利用struts实现文件下载时改变文件名称

    先看看效果图: package com.fenghuo.struts.download; import java.net.URLEncoder; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.

随机推荐