import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class DataMirroring {
public static void main(String[] args) {
// Load configuration
Config config = new Config();
// Read datasets
List<String> sourceFiles = config.getSourceFiles();
List<String> destinationFiles = config.getDestinationFiles();
// Mirror data
mirrorData(sourceFiles, destinationFiles, config.getMirroringStrategy());
}
public static void mirrorData(List<String> sourceFiles, List<String> destinationFiles, String mirroringStrategy) {
for (int i = 0; i < sourceFiles.size(); i++) {
String sourceFile = sourceFiles.get(i);
String destinationFile = destinationFiles.get(i);
try {
// Read from source file
List<String> sourceData = readData(sourceFile);
// Mirror data based on strategy
List<String> mirroredData = mirror(sourceData, mirroringStrategy);
// Write to destination file
writeData(mirroredData, destinationFile);
System.out.println("Mirrored data from " + sourceFile + " to " + destinationFile);
} catch (IOException e) {
System.err.println("Error processing " + sourceFile + ": " + e.getMessage());
}
}
}
private static List<String> readData(String filePath) throws IOException {
List<String> data = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
data.add(line);
}
}
return data;
}
private static List<String> mirror(List<String> data, String mirroringStrategy) {
List<String> mirroredData = new ArrayList<>();
switch (mirroringStrategy.toLowerCase()) {
case "reverse":
// Reverse the order of the data
for (int i = data.size() - 1; i >= 0; i--) {
mirroredData.add(data.get(i));
}
break;
case "uppercase":
// Convert to uppercase
for (String item : data) {
mirroredData.add(item.toUpperCase());
}
break;
default:
// Default: copy data
mirroredData.addAll(data);
}
return mirroredData;
}
private static void writeData(List<String> data, String filePath) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
for (String item : data) {
writer.write(item);
writer.newLine();
}
}
}
// Configuration class to store file paths and mirroring strategy
static class Config {
private List<String> sourceFiles;
private List<String> destinationFiles;
private String mirroringStrategy;
public Config() {
// Load configuration from file
try (Scanner scanner = new Scanner(new File("config.txt"))) {
this.sourceFiles = new ArrayList<>();
this.destinationFiles = new ArrayList<>();
this.mirroringStrategy = ""; // Default value
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("source=")) {
this.sourceFiles = parseFilePaths(line.substring("source=".length()).trim());
} else if (line.startsWith("destination=")) {
this.destinationFiles = parseFilePaths(line.substring("destination=".length()).trim());
} else if (line.startsWith("strategy=")) {
this.mirroringStrategy = line.substring("strategy=".length()).trim();
}
}
} catch (FileNotFoundException e) {
System.err.println("Config file not found. Using default values.");
}
}
private List<String> parseFilePaths(String filePaths) {
return List.of(filePaths.split(",")); // Split by comma
}
public List<String> getSourceFiles() {
return sourceFiles;
}
Add your comment