我有一个文件列表,这些文件的名称是由一个类组和一个标识(eg. science_000000001.java)
我能够获取所有文件的名称并拆分它们,所以我将类组放入一个数组,将另外的数据放入另一个...我有它,以便数组不能有两个相同的值。
这是问题,我想创建一个包含这些classgroups和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
但我想不出一种正确循环数组以创建相应目录的方法吗?
此外我能够自己创建文件夹,只是获取正确的目录是问题,有没有人有任何想法?
答案 0 :(得分: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();
答案 1 :(得分: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");
}
}
}
}
希望有所帮助。