开发者

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");


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


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));
    }
}


hi all i find the answer you have just to add (C0Py0) fore every new file uloaded after that test if your file exsite than call the method changing();

<%! String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len);

for (i = (len - 1); i >= 0; i--)
  dest.append(source.charAt(i));
return dest.toString();

}

%> <%! String changing(String ffName){ String newName,ext,finalName; String invName,increment; String copyf=null; String test; int i=0; int j=0; int incr; int k=j+4;

newName=ffName.substring(0,ffName.length()-4); ext = ffName.substring(ffName.length()-3,ffName.length());

  invName=reverseIt(newName);

                                while(k != invName.length()){

                                 if( invName.substring(j,k).equals("yP0C")){
                                                              copyf=invName.substring(0,j);
                                                              k=invName.length()-1;

                                                                        }
                                 else{
                                     j++;
                                     k++;
                                    }

                                                             }
increment=reverseIt(copyf);
//System.out.println(increment);
incr=Integer.parseInt(increment);
incr+=1;
newName=newName.substring(0,newName.length()-(j-1));
increment=String.valueOf(incr);
finalName=newName+increment+"."+ext;

return finalName;
}

%>

i wish that will help outhers

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜