0

番号付きの新しいファイルを作成する方法(新しい作成の場合はインクリメント)。今、「29-03-2013.pdf」というディレクトリにファイルがあります。これを再度作成する場合は、「29-03-2013(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;
}
4

2 に答える 2

1

ループはここで完璧に見えます:

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

+(速度にこだわる場合は、StringBuilder は、String を と連結するよりもわずかに高速です。)

于 2013-03-29T15:08:03.280 に答える
0

それは速く書かれていて、すべて大丈夫かどうかをチェックしていません。という考え方を示しています。1 つの正規表現パターンを使用して最適化することも、正規表現なしで行うこともできます。

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
}
于 2013-03-29T15:12:54.033 に答える