いくつかのファイルがあります。自動的に与えられた番号に従って、最後に作成されたのはどれかを知る必要があります。
たとえば、file1、file2、file3 がある場合、file3 を受け取りたいとします。同じディレクトリに他のフォルダーとファイルがあるため、「最終変更」でこれを行うことはできません。
また、この最後のファイルに対して、彼の番号を 1 増やしたいと思います。
いくつかのファイルがあります。自動的に与えられた番号に従って、最後に作成されたのはどれかを知る必要があります。
たとえば、file1、file2、file3 がある場合、file3 を受け取りたいとします。同じディレクトリに他のフォルダーとファイルがあるため、「最終変更」でこれを行うことはできません。
また、この最後のファイルに対して、彼の番号を 1 増やしたいと思います。
ファイルをリストに入れて語彙的にソートし、最後のものを取ります。
もちろん、正規表現またはcontains/startswith/endswithで探しているものを除外する必要があります
別の簡単な解決策を次に示します。
import java.io.File;
public class FileUtility {
private static final String FOLDER_PAHT = "D:\\Test";
private static final String FILE_PREFIX = "file";
/**
* @param args
*/
public static void main(String[] args) {
int lastFileNumber = getLastFileNumber();
System.out.println("In folder " + FOLDER_PAHT + " last file is " + FILE_PREFIX + lastFileNumber);
if(incrementFileNumber(lastFileNumber)) {
System.out.println("After incrementing the last file becomes : FILE_PREFIX" + lastFileNumber + 1);
} else {
System.out.println("Some error occured while updating file number.");
}
}
private static int getLastFileNumber(){
int maxFileNumber = 0;
File folder = new File(FOLDER_PAHT);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
String fileName = listOfFiles[i].getName();
if (listOfFiles[i].isFile() && fileName.contains(FILE_PREFIX)) {
try {
int fileNumber = Integer.parseInt(fileName.substring(FILE_PREFIX.length(), fileName.indexOf(".")));
if(maxFileNumber < fileNumber) {
maxFileNumber = fileNumber;
}
} catch (NumberFormatException e) {
// Because there can be files with starting name as FILE_PREFIX but not valid integer appended to them.
//NOthing to do
}
}
}
return maxFileNumber;
}
private static boolean incrementFileNumber(final int oldNumber) {
File oldfile =new File(FOLDER_PAHT + File.separator + FILE_PREFIX + oldNumber);
File newfile =new File(FOLDER_PAHT + File.separator + FILE_PREFIX + (oldNumber + 1) + ".txt");
return oldfile.renameTo(newfile);
}
}
public static void main (String[] args) throws Exception
{
File foldersContainer = new File("c:/test");
String latestFileName = "";
Integer highestFileNumber = 0;
for (File tmpFile : foldersContainer.listFiles()){
if (tmpFile.isFolder()) {
int currentNumber = extractFileNumber(tmpFile.getName());
if (currentNumber > highestFileNumber){
highestFileNumber = currentNumber;
latestFileName = tmpFile.getName();
}
}
}
latestFileName.replace(highestFileNumber.toString(),
(++highestFileNumber).toString());
System.out.println("Latest file (incremented): " + latestFileName);
}
private static int extractFileNumber(String name){
for (int x=name.length()-1; x >= 0; x--)
if (!Character.isDigit(name.charAt(x)))
return Integer.parseInt(name.substring(x+1));
return -1;
}
最後の数字の前のファイル名に数字を含めることができる場合は、lastIndexOf
実際にインクリメントしたい出現のみを確実に見つけるために を使用する必要があります。
それ以外の
latestFileName.replace(highestFileNumber.toString(),
(++highestFileNumber).toString());
あなたが使用する必要があります
latestFileName = latestFileName
.substring(0,latestFileName.lastIndexOf(highestFileNumber.toString()))
.concat((++highestFileNumber).toString());