2

我有一个文件列表,这些文件的名称由一个类组和一个 id 组成(eg. science_000000001.java)

我能够获取所有文件的名称并将它们拆分,因此我将类组放入一个数组中,将 id 放入另一个数组中。我拥有它,因此数组不能有两个相同的值。

这就是问题所在,我想用这些类组和 id 创建一个目录,例如:

science_000000001.java    would be in    science/000000001/science_000000001.java
science_000000002.java    would be in    science/000000002/science_000000002.java
  maths_000000001.java    would be in      maths/000000001/maths_000000001.java

但我想不出一种正确循环数组以创建适当目录的方法?

我也可以自己创建文件夹,只是获得正确的目录才是问题所在,有人有什么想法吗?

4

2 回答 2

3

鉴于:

String filename = "science_000000001.java";

然后

File fullPathFile = new File(filename.replaceAll("(\\w+)_(\\d+).*", "$1/$2/$0"));

为您提供文件的完整路径,在这种情况下science/000000001/science_000000001.java


如果要创建目录,请使用以下命令:

fullPathFile.getParentFile().mkdirs();
于 2012-05-24T14:13:38.817 回答
0

上面的答案非常适合使用该命名约定创建新文件。如果您想将现有文件分类到它们的相关类组和 Id 中,您可以使用以下代码:

public static void main(String[] args) {
    String dirPath = "D:\\temp\\";
    File dir = new File(dirPath);

    // Get Directory Listing
    File[] fileList = dir.listFiles();

    // Process each file
    for(int i=0; i < fileList.length; i++)
    {
        if(fileList[i].isFile()) {
            String fileName = fileList[i].getName();
            // Split at the file extension and the classgroup
            String[] fileParts = fileName.split("[_\\.]");
            System.out.println("One: " + fileParts[0] + ", Two: " + fileParts[1]);

            // Check directory exists
            File newDir = new File(dirPath + fileParts[0] + "\\" + fileParts[1]);
            if(!newDir.exists()) {
                // Create directory
                if(newDir.mkdirs()) {
                    System.out.println("Directory Created");
                }
            } 

            // Move file into directory
            if(fileList[i].renameTo(new File(dirPath + fileParts[0] + "\\" + fileParts[1] + "\\" + fileName))) {
                System.out.println("File Moved");
            }

        }
    }
}

希望有帮助。

于 2012-05-24T15:19:33.553 回答