0

我有几个文件,事情是我需要根据我自动给它们的数字知道哪个是最后创建的。

例如,如果我有:file1、file2、file3 我想接收 file3。我无法使用“上次修改”来执行此操作,因为我在同一目录中有其他文件夹和文件。

同样对于最后一个文件,我想将他的数字增加 1。

4

4 回答 4

2

将文件放在一个列表中并按词法排序,然后取最后一个。

当然,您必须使用 regex 或 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) {
        File dir = new File("directory of the files");
        File [] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.startsWith("folder");
            }
        });
        for (File file : files) {
            System.out.println(file.getName());
        }
        System.out.println("---------");
        List<File> myFile = new ArrayList<>(Arrays.asList(files));
        Collections.sort(myFile, new Comparator<File>() {

            @Override
            public int compare(File f1, File f2) {
                // TODO Auto-generated method stub
                int numberF1 = Integer.parseInt(f1.getName().replace("folder",""));
                int numberF2 = Integer.parseInt(f2.getName().replace("folder",""));
                return Integer.compare(numberF1, numberF2);
            }
        });

        for (File file : myFile) {
            System.out.println(file.getName());
        }
    }

输出 :

folder10
folder2
folder20
folder250
---------
folder2
folder10
folder20
folder250
于 2013-06-13T09:34:36.757 回答
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 回答