1. import java.io.File;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class DirectorySplitter {
  5. /**
  6. * Splits the files in a directory into smaller directories.
  7. *
  8. * @param sourceDir The directory to split.
  9. * @param numSubDirs The number of subdirectories to create.
  10. */
  11. public static void splitDirectory(File sourceDir, int numSubDirs) {
  12. if (!sourceDir.exists() || !sourceDir.isDirectory()) {
  13. System.err.println("Invalid source directory: " + sourceDir.getAbsolutePath());
  14. return;
  15. }
  16. File[] files = sourceDir.listFiles();
  17. if (files == null) {
  18. System.err.println("Could not list files in: " + sourceDir.getAbsolutePath());
  19. return;
  20. }
  21. if (files.length == 0) {
  22. System.out.println("Directory is empty.");
  23. return;
  24. }
  25. List<File> fileList = new ArrayList<>();
  26. for (File file : files) {
  27. if (file.isFile()) {
  28. fileList.add(file);
  29. }
  30. }
  31. if (fileList.isEmpty()) {
  32. System.out.println("No files found in the directory.");
  33. return;
  34. }
  35. int filesPerSubDir = (int) Math.ceil((double) fileList.size() / numSubDirs); // Calculate files per sub directory
  36. int subDirCount = 0;
  37. for (File file : fileList) {
  38. File subDir = new File(sourceDir, "subdir_" + subDirCount); // Create subdirectories
  39. subDir.mkdir();
  40. subDirCount++;
  41. if (subDirCount % filesPerSubDir == 0) {
  42. subDirCount = 0;
  43. }
  44. File destinationFile = new File(subDir, file.getName());
  45. file.copyTo(destinationFile); // Copy file to the sub directory
  46. }
  47. System.out.println("Directory split successfully.");
  48. }
  49. public static void main(String[] args) {
  50. // Example Usage:
  51. File sourceDirectory = new File("sandbox_data"); // Replace with your directory
  52. int numberOfSubDirectories = 3;
  53. // Create the source directory if it doesn't exist.
  54. if (!sourceDirectory.exists()) {
  55. sourceDirectory.mkdir();
  56. // Create some dummy files
  57. for(int i = 0; i < 10; i++) {
  58. File dummyFile = new File(sourceDirectory, "test_file_" + i + ".txt");
  59. dummyFile.createNewFile();
  60. }
  61. }
  62. splitDirectory(sourceDirectory, numberOfSubDirectories);
  63. }
  64. }

Add your comment