Java добавить инкрементный номер в файл существует до - PullRequest
5 голосов
/ 31 мая 2011

Мне нужно добавить инкрементное число в существующий файл, я знаю, как это проверить и как добавить число в конце, но мне нужна идея, как увеличивать число каждый раз

посмотрите это, например. понять меня C: \ MyFiles \ File.pdf существует, поэтому попробуйте C: \ MyFiles \ File1.pdf и в следующий раз C: \ MyFiles \ File2.pdf

Не знаю, как получить последнее увеличение

и, пожалуйста, посмотрите мой код, я могу увеличить только один раз

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

Ответы [ 3 ]

7 голосов
/ 31 мая 2011

вам нужно передать File2.pdf методу во второй раз или проверить, существует ли сгенерированное имя файла, а затем повторить с методом с новым именем файла

Кстати, я бы использовал для этого регулярное выражение:

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
1 голос
/ 31 мая 2012

Если вы хотите сохранить первое имя файла без суффикса номера, это сработало для меня (основываясь на ответе rachet)

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));
    }
}
0 голосов
/ 07 июня 2011

Привет, все, я нахожу ответ, который вы просто должны добавить (C0Py0) для каждого нового файла, загруженного после этого теста, если ваш файл превышает, чем вызов метода change ();

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

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

}

%> <%! Строка меняется (String ffName) { String newName, ext, finalName; Строка invName, инкремент; Строка copyf = null; Струнный тест; int i = 0; int j = 0; int incr; int k = j + 4; </p>

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

%>

Желаю, чтобы это помогло другим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...