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));
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With