2013-03-29 15 views
0

如何使用數字創建一個新文件(如果創建了一個新增文件)。現在我有一個文件作爲「29-03-2013.pdf」在direcoty。如果再次創建,我想創建一個名稱爲「29-03-2013(1).pdf」的新文件等等。如何在同一個目錄下創建一個像existsFileName(1).pdf這樣的新文件

我的代碼:

String finalResponse=""; 
String pdfnameDate=selectedFromDate+"_"+selectedToDate; 

Document doc = new Document(PageSize.A4.rotate(), 50, 10, 10, 10); 


try { 
    File alertsFiledir = new File(Environment.getExternalStorageDirectory(), "/RAMAPP/ALERTS"); 
    if (!alertsFiledir.exists()) { 
     if (!alertsFiledir.mkdirs()) { 
      finalResponse="failed"; 
      Log.i("alertsavepdf","directory not created"); 
      return finalResponse; 
     } 
    } 
    File alertsFile = new File(alertsFiledir,pdfnameDate+".pdf"); 

    if (!alertsFile.exists()) { 
     try { 
      boolean fileExist = alertsFile.createNewFile(); 
      if(!fileExist) 
      { 
       finalResponse="failed"; 
       return finalResponse; 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
      finalResponse="failed"; 
      return finalResponse; 
     } 
    } 
    else 
    { 
     **//here how to Create a new File like pdfnameDate(1) or pdfnameDate(2).Here pdfnameDate is exist file name** 

    } 
    PdfWriter.getInstance(doc, new FileOutputStream(alertsFile)); 
    doc.open(); 
    Log.i("alertsavepdf","pdf file created"); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    finalResponse="failed"; 
    Log.i("alertsavepdf","savepdf error->"+e.toString()); 
    return finalResponse; 
} catch (DocumentException e) { 
    e.printStackTrace(); 
    finalResponse="failed"; 
    Log.i("alertsavepdf","savepdf error->"+e.toString()); 
    return finalResponse; 
} 

回答

1

一個循環似乎在這裏完美:

int count = 0; 
do { 
    count++; 
    alertsFile = new File(alertsFiledir,pdfnameDate + "(" + count + ").pdf"); 
} while(alertFile.exists()); 
// Make the file 

(一個StringBuilder會比+串聯字符串快是咯,如果你與速度癡迷。)

+0

是的,我用while循環修改你的代碼以滿足我的需求。它工作正常。 – Ramprasad

0

它寫得很快,並沒有檢查是否一切正常。它顯示了這個想法。你可以使用一個正則表達式模式優化它,甚至不用正則表達式。

void method() { 
// ... your code 
    if (file.exists()) { 
     final int number = getFileNumber(file); 
     file = new File(getFilePathWithoutExtAndNumber(file) + "(" + (number + 1) + ")" + getFileExt(file)); 
    } 
} 

private int getFileNumber(File file) { 
    final Pattern p = Pattern.compile(".*\\((\\d+)\\)\\..*$"); 
    final Matcher m = p.matcher(file.getName); 

    if (!m.matches()) { 
     return 0; 
    } 
    return Integer.parseInt(m.group(1)); 
} 


private String getFilePathWithoutExtAndNumber(File file) { 
    final Pattern p = Pattern.compile("(.*)\\((\\d+)\\)\\..*$"); 
    final Matcher m = p.matcher(file.getName); 

    if(!m.matches()) { 
     getFilePathWidthoutExt(file); 
    } 

    return m.group(1) 

} 

private String getFilePathWidthoutExt(File file) { 
    //not in scope of this question 
} 

private String getFileExt(File file) { 
    // not in scope of this question 
} 
相關問題