Java 检测列表中的最后一个文件夹

Java 检测列表中的最后一个文件夹,java,Java,我有几个文件,我需要根据我自动给出的数字知道最后创建的是哪一个 例如,如果我有:file1、file2、file3,我想接收file3。我不能用“last modified”这样做,因为我在同一目录中有其他文件夹和文件 同样对于最后一个文件,我想将他的数字增加到1。将文件放入一个列表中,按词汇进行排序,然后取最后一个 当然,你必须用regex或contains/startswith/endswith过滤掉你正在寻找的文件。把这些文件放在一个列表中,按词汇排序,然后取最后一个 当然,您必须过滤掉使

我有几个文件,我需要根据我自动给出的数字知道最后创建的是哪一个

例如,如果我有:file1、file2、file3,我想接收file3。我不能用“last modified”这样做,因为我在同一目录中有其他文件夹和文件


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

将文件放入一个列表中,按词汇进行排序,然后取最后一个


当然,你必须用regex或contains/startswith/endswith过滤掉你正在寻找的文件。把这些文件放在一个列表中,按词汇排序,然后取最后一个


当然,您必须过滤掉使用regex或contains/startswith/endswith查找的内容。好的,这里有一个替代方法。我假设文件名是已知的,并且它们具有相同的名称

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

好的,这里有一个替代方案。我假设文件名是已知的,并且它们具有相同的名称

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

下面是另一个简单的解决方案

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);
    }
}
导入java.io.File;
公共类文件实用程序{
专用静态最终字符串文件夹\u PAHT=“D:\\Test”;
私有静态最终字符串文件\u PREFIX=“FILE”;
/**
*@param args
*/
公共静态void main(字符串[]args){
int lastFileNumber=getLastFileNumber();
System.out.println(“In folder”+folder_PAHT+”最后一个文件是“+file_PREFIX+lastFileNumber”);
if(递增文件号(lastFileNumber)){
System.out.println(“递增后,最后一个文件变成:file_PREFIX”+lastFileNumber+1);
}否则{
System.out.println(“更新文件号时发生了一些错误。”);
}
}
私有静态int getLastFileNumber(){
int maxFileNumber=0;
文件夹=新文件(文件夹);
File[]listOfFiles=folder.listFiles();
for(int i=0;i
这里是另一个简单的解决方案

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);
    }
}
导入java.io.File;
公共类文件实用程序{
专用静态最终字符串文件夹\u PAHT=“D:\\Test”;
私有静态最终字符串文件\u PREFIX=“FILE”;
/**
*@param args
*/
公共静态void main(字符串[]args){
int lastFileNumber=getLastFileNumber();
System.out.println(“In folder”+folder_PAHT+”最后一个文件是“+file_PREFIX+lastFileNumber”);
if(递增文件号(lastFileNumber)){
System.out.println(“递增后,最后一个文件变成:file_PREFIX”+lastFileNumber+1);
}否则{
System.out.println(“更新文件号时发生了一些错误。”);
}
}
私有静态int getLastFileNumber(){
int maxFileNumber=0;
文件夹=新文件(文件夹);
File[]listOfFiles=folder.listFiles();
for(int i=0;i
如果最后一个数字之前的文件名可以包含数字,那么您应该使用
lastIndexOf
确保只找到您真正想要增加的内容

而不是

latestFileName.replace(highestFileNumber.toString(),
                       (++highestFileNumber).toString());
你应该使用

latestFileName = latestFileName
     .substring(0,latestFileName.lastIndexOf(highestFileNumber.toString()))
     .concat((++highestFileNumber).toString());
如果最后一个数字之前的文件名可以包含数字,那么您应该使用
lastIndexOf
确保只找到您真正想要增加的内容

而不是

latestFileName.replace(highestFileNumber.toString(),
                       (++highestFileNumber).toString());
你应该使用

latestFileName = latestFileName
     .substring(0,latestFileName.lastIndexOf(highestFileNumber.toString()))
     .concat((++highestFileNumber).toString());

我想你最好开始实现它。你知道文件在哪个目录下吗?如果是,除了号码外,他们的名字是否相同?@zouzu我只知道目录名,最后的号码不同。这就是你真正想要达到的目的吗?@Andrea Ligios我正在做一个程序,获取几个文件并将它们保存到一个文件夹中,当你再次运行该程序时,文件夹名称应将其编号增加到1,以便将文件存储到新文件夹中,它需要这样做。我想你最好的办法是开始实现它。你知道文件在哪个目录下吗?如果是,我会的