Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java add incremental number to file exist before

I need to to add an incremental number to file exist before ,i know how to chek that and how to add the number at the end but i need an idea how to incriment the number every time

look this e.g. to understand me C:\MyFiles\File.pdf exists so try C:\MyFiles\File1.pdf and next time C:\MyFiles\File2.pdf

dont know how get the last incrementation

and plz see my code i can increment only one time

    int indexOfDot = fName.indexOf(".");
    //if theres a dot, start one character before it, otherwise,
    //start at the end of the string
    int startIndex = indexOfDot > -1 ? indexOfDot - 1 : fName.length() - 1;
    if(indexOfDot > -1)
         fileNameSuffix = fName.substring(indexOfDot, fName.length());
    //search backward on the name to see if it already
    //has a number and count the digits
    StringBuffer digits = new StringBuffer();
    char character = 0;
    for (int i = startIndex; i >= 0; i--)
    {
         character = fName.charAt(i);
         if (Character.isDigit(character))
         {
              digits.append(character);
         }
    }
    if (digits.length() > 0)
    {
          //There where already digits in the filename.
          //Create a number from the digits and add 1
          Integer newNumber =new Integer(Integer.parseInt(digits.toString()) + 1);
          //Then append that to the actual filename
          String actualFileName = fName.substring(0, startIndex + 1 - digits.length());
          rtnNewFileName = actualFileName + newNumber.toString() + fileNameSuffix;
    }else
    {
          //There where no digits in the filename
          //Append 1 to the actual filename
          String actualFileName = fName.substring(0, startIndex - digits.length());
          rtnNewFileName = actualFileName + "1" + fileNameSuffix;
   }

   file.setFileName(rtnNewFileName);

   out.println("<li>File Uploaded <br/>Form field : uploadfile"+"<BR> Uploaded file : "+file.getFileName()+" ("+file.getFileSize()+" bytes)"+"<BR> Content Type : "+file.getContentType());

    //Uses the bean now to store specified by jsp:setProperty at the top.
    upBean.store(mrequest, "uploadfile");
like image 1000
Dilllllo Avatar asked May 31 '11 15:05

Dilllllo


2 Answers

you need to pass File2.pdf to the method the second time or check if the generated filename exists and then repeat with the method with the new filename

btw I'd have used a regex for this:

Pattern p = Pattern.compile("(.*?)(\\d+)?(\\..*)?");
do{
    Matcher m = p.matcher(fName);
    if(m.matches()){//group 1 is the prefix, group 2 is the number, group 3 is the suffix
        fName = m.group(1) + (m.group(2)==null?1:(Integer.parseInt(m.group(2)) + 1)) + (m.group(3)==null?"":m.group(3));
    }
}while(new File(fName).exists());//repeat until a new filename is generated
like image 70
ratchet freak Avatar answered Oct 11 '22 18:10

ratchet freak


If you want to keep the first file name without a number suffix, this worked for me (based on rachet's answer)

Pattern p = Pattern.compile("(.*?)(\\d+)?(\\..*)?");

while(new File(pathname).exists()){
    Matcher m = p.matcher(pathname);
    if(m.matches()){//group 1 is the prefix, group 2 is the number, group 3 is the suffix
        pathname = m.group(1) + (m.group(2)==null?1:(Integer.parseInt(m.group(2)) + 1)) + (m.group(3)==null?"":m.group(3));
    }
}
like image 26
Eran Medan Avatar answered Oct 11 '22 16:10

Eran Medan