2

ファイルのリストがあります。これらのファイルの名前は、クラスグループと ID で構成されています(eg. science_000000001.java)

私はすべてのファイルの名前を取得してそれらを分割することができるので、クラスグループを1つの配列に入れ、IDを別の配列に入れています..配列が同じ値を2つ持つことができないようにしています。

これが問題です。これらのクラスグループと 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 に答える