0

いくつかのファイルがあります。自動的に与えられた番号に従って、最後に作成されたのはどれかを知る必要があります。

たとえば、file1、file2、file3 がある場合、file3 を受け取りたいとします。同じディレクトリに他のフォルダーとファイルがあるため、「最終変更」でこれを行うことはできません。

また、この最後のファイルに対して、彼の番号を 1 増やしたいと思います。

4

4 に答える 4

2

ファイルをリストに入れて語彙的にソートし、最後のものを取ります。

もちろん、正規表現またはcontains/startswith/endswithで探しているものを除外する必要があります

于 2013-06-13T09:15:25.450 に答える
1

別の簡単な解決策を次に示します。

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);
    }
}
于 2013-06-13T09:50:12.423 に答える
0
    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());
于 2013-06-13T10:10:50.503 に答える