Zum Inhalt

Random File Picker

Mit diesem paar Zeilen Code ist es mit Java 7 möglich, zufällig Dateien aus einer Ordnerstruktur zu kopieren, z.B. um schnell mal 100 mp3 Dateien aus der Sammlung auf eine CD oder einen USB Stick zu schieben, ohne selbst bei der Auswahl Hand kreativ werden zu müssen.

Hier gibts den Sourcecode und ein fertiges JAR File zum Download: RandomFilePicker

/*
* Created on 30.08.2014
*/
package de.denniswilmsmann.rfp;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

/*
* $Log: $
*/

public class RandomFilePicker {

	private final static List<File> files = new ArrayList<File>();

	public static void main(String[] args) {

		if (args == null || args.length < 4) {
			System.out
					.println("run with java -jar RandomFilePicker.jar <Source Folder> <Destination Folder> <Recursive y/n> <Number of Files>");
			System.out
					.println("run with java -jar RandomFilePicker.jar D:\\MyMusicArchive D:\\RandomMusic y 100");
			return;
		}

		File sourceFolder = new File(args[0]);

		if (!sourceFolder.isDirectory()) {
			System.out.println(args[0] + " is not a folder");
			return;
		}

		File destFolder = new File(args[1]);

		if (!sourceFolder.isDirectory()) {
			System.out.println(args[1] + " is not a folder");
			return;
		}

		boolean recursive = false;
		if (args[2].equalsIgnoreCase("y")) {
			recursive = true;
		}

		int numberOfFiles = Integer.parseInt(args[3]);

		parseFolder(sourceFolder, recursive);

		if (files.size() < numberOfFiles) {
			System.out
					.println("not enough files found, please reduce <Number of Files>");
		} else {
			Set<File> selectedFiles = new HashSet<File>();
			Random generator = new Random();
			while (selectedFiles.size() < numberOfFiles) {
				int i = generator.nextInt(files.size());
				selectedFiles.add(files.get(i));
			}
			for (File f : selectedFiles) {
				File out = new File(destFolder.getAbsolutePath()
						+ File.separator + f.getName());
				try {
					Files.copy(f.toPath(), out.toPath());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	private static void parseFolder(File folder, boolean recursive) {
		for (File f : folder.listFiles()) {
			if (f.isFile()) {
				addFile(f);
			} else if (f.isDirectory() && recursive) {
				parseFolder(f, recursive);
			}
		}
	}

	private static void addFile(File f) {
		// System.out.println(files.size() + 1 + ": " + f.getAbsolutePath());
		files.add(f);
	}
}
Published inJava

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.