import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class DirectorySplitter {
/**
* Splits the files in a directory into smaller directories.
*
* @param sourceDir The directory to split.
* @param numSubDirs The number of subdirectories to create.
*/
public static void splitDirectory(File sourceDir, int numSubDirs) {
if (!sourceDir.exists() || !sourceDir.isDirectory()) {
System.err.println("Invalid source directory: " + sourceDir.getAbsolutePath());
return;
}
File[] files = sourceDir.listFiles();
if (files == null) {
System.err.println("Could not list files in: " + sourceDir.getAbsolutePath());
return;
}
if (files.length == 0) {
System.out.println("Directory is empty.");
return;
}
List<File> fileList = new ArrayList<>();
for (File file : files) {
if (file.isFile()) {
fileList.add(file);
}
}
if (fileList.isEmpty()) {
System.out.println("No files found in the directory.");
return;
}
int filesPerSubDir = (int) Math.ceil((double) fileList.size() / numSubDirs); // Calculate files per sub directory
int subDirCount = 0;
for (File file : fileList) {
File subDir = new File(sourceDir, "subdir_" + subDirCount); // Create subdirectories
subDir.mkdir();
subDirCount++;
if (subDirCount % filesPerSubDir == 0) {
subDirCount = 0;
}
File destinationFile = new File(subDir, file.getName());
file.copyTo(destinationFile); // Copy file to the sub directory
}
System.out.println("Directory split successfully.");
}
public static void main(String[] args) {
// Example Usage:
File sourceDirectory = new File("sandbox_data"); // Replace with your directory
int numberOfSubDirectories = 3;
// Create the source directory if it doesn't exist.
if (!sourceDirectory.exists()) {
sourceDirectory.mkdir();
// Create some dummy files
for(int i = 0; i < 10; i++) {
File dummyFile = new File(sourceDirectory, "test_file_" + i + ".txt");
dummyFile.createNewFile();
}
}
splitDirectory(sourceDirectory, numberOfSubDirectories);
}
}
Add your comment