2016-04-13 103 views
0

文件名,我需要在一個特定的目錄時間戳在Java

d建立在當前時間戳的名稱的文本文件:\作業\ abassign在java中。

但是,當我試圖做到以下錯誤來作爲文件名不應該包含':'。但時間戳包含「:」

異常線程「main」產生java.io.IOException:文件名,目錄名或卷標語法不正確 在java.io.WinNTFileSystem.createFileExclusively(本機方法) 在java.io.File.createNewFile(File.java:883) 在abassign.Abassign.main(Abassign.java:35) Java結果:1

此錯誤顯示出來

+1

'.replace生成文件的代碼(「:」,「」)'的格式字符串時間戳 – Ferrybig

+0

做正確的方式!看看'SimpleDateFormat',它會將你的時間格式化爲一個更靈活的模式,比如''year_month_day_hour_min_sec''格式,沒有任何保留字符。 – MrSimpleMind

回答

1

如果你在Windows上你的文件名不能包含:,你需要使用其它字符替換它...

以下字符是保留:

< (less than) 
> (greater than) 
: (colon) 
" (double quote) 
/(forward slash) 
\ (backslash) 
| (vertical bar or pipe) 
? (question mark) 
* (asterisk) 

例如:

String yourTimeStamp = "01-01-2016 17:00:00"; 
File yourFile = new File("your directory", yourTimeStamp.replace(":", "_")); 
2

我用的是這樣的:

StringBuffer fn = new StringBuffer(); 
    fn.append(workingDirectory); 
    fn.append("/"); 
    fn.append("fileNamePrefix-"); 
    fn.append("-"); 
    DateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss"); 
    fn.append(df.format(new Date())); 
    fn.append("-fileNamePostFix.txt"); 
    return fn.toString(); 

(當然,你可以刪除前綴,後綴和workingDirectory部分)

0

這裏是使用時間戳

/* 
* created by Sandip Bhoi 9960426568 
*/ 
package checkapplicationisopen; 


import java.io.File; 
import java.io.IOException; 
import java.sql.Timestamp; 
import java.util.Random; 

public class GeneratorUtil { 


     /** 
     * 
     * @param args 
     */ 
    public static void main(String args[]) 
    { 
      GeneratorUtil generatorUtil=new GeneratorUtil(); 
      generatorUtil.createNewFile("c:\\Documents", "pdf"); 
    } 



    /** 
    * 
    * @param min 
    * @param max 
    * @return 
    */ 
    public static int randInt(int min, int max) { 

     // Usually this can be a field rather than a method variable 
     Random rand = new Random(); 

     // nextInt is normally exclusive of the top value, 
     // so add 1 to make it inclusive 
     int randomNum = rand.nextInt((max - min) + 1) + min; 
     return randomNum; 
    } 

    /** 
    * 
    * @param prefix adding the prefix for time stamp generated id 
    * @return the concatenated string with id and prefix 
    */ 
    public static String getId(String prefix) 
    { 
     java.util.Date date = new java.util.Date(); 
     String timestamp = new Timestamp(date.getTime()).toString(); 
     String dt1 = timestamp.replace('-', '_'); 
     String dt2 = dt1.replace(' ', '_'); 
     String dt3 = dt2.replace(':', '_'); 
     String dt4 = dt3.replace('.', '_'); 
     int temp = randInt(1, 5000); 
     return prefix +"_"+ temp + "_" + dt4;   
    } 



     /** 
     * 
     * @param direcotory 
     * @param extension 
     */ 
     public void createNewFile(String direcotory,String extension) 
     { 
      try { 

       File file = new File(direcotory+"//"+getId("File")+"."+extension); 
       if (file.createNewFile()){ 
        System.out.println("File is created!"); 
       }else{ 
        System.out.println("File already exists."); 
       } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
     } 

} 
+0

雖然此代碼段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – Ferrybig