import java.text.NumberFormat;
import java.nio.file.*;
import java.io.*;
import java.util.ArrayList;
class ProdMantApp{
static String dir = "uno";
static String ar1 = "maestro1.txt", ar2 = "actualizar.txt", ar3 = "maestro2.txt";
static BD bd = new BD();
public static void main(String[] args){
crearEntrada();
bd.actualizar(dir, ar1, ar2, ar3);
salida(dir, ar3);
}
static void crearEntrada(){
bd.crearDir(dir);
Producto [] ps1 = {new Producto("P1", Utility.ranI(80), Utility.ranF(50)),
new Producto("P3", Utility.ranI(80), Utility.ranF(50)),
new Producto("P4", Utility.ranI(80), Utility.ranF(50))};
System.out.println("\nEntradas:");
System.out.println("Archivo " + ar1);
System.out.println("código cantidad precio");
for(Producto p: ps1) System.out.println(p);
bd.escribir(ps1, dir, ar1);
System.out.println("Archivo " + ar2);
System.out.println("código cantidad precio");
Producto [] ps2 = {new Producto("P2", Utility.ranI(80), Utility.ranF(50)),
new Producto("P3", Utility.ranI(80), Utility.ranF(50))};
for(Producto p: ps2) System.out.println(p);
bd.escribir(ps2, dir, ar2);
}
static void salida(String dir, String ar3){
System.out.println("\nSalida:");
System.out.println("Archivo " + ar3);
System.out.println("código cantidad precio");
ArrayList<String> ps3 = bd.salir(dir, ar3);
for(String p: ps3) System.out.println(p);
}
}
class Utility{
static int ranI(int n){return (int) (Math.random()*n)+1;}
static float ranF(int n){return (float)(Math.random()*n)+1;}
}
class Producto{
String codigo;
int cantidad;
float precio;
Producto(){}
Producto(String codigo, int cantidad, float precio){
this.codigo = codigo;
this.cantidad = cantidad;
this.precio = precio;
}
public String toString(){
return codigo + "\t" + cantidad + "\t" + NumberFormat.getNumberInstance().format(precio);
}
public Producto toProducto(String line){
String[] cols = line.split("\t");
return new Producto(cols[0], Integer.parseInt(cols[1]), Float.parseFloat(cols[2]));
}
}
class BD{
void crearDir(String dir){
Path pdir = Paths.get(dir);
try{
if (Files.notExists(pdir)) Files.createDirectories(pdir);
} catch (IOException e) {System.out.println(e);}
}
void escribir(Producto[] pr, String dir, String archivo){
File file = Paths.get(dir, archivo).toFile();
try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file, false)))){
for(Producto p: pr) out.println(p);
} catch (IOException e){ System.out.println(e);}
}
void actualizar(String dir, String ar1, String ar2, String ar3){
File file1 = Paths.get(dir, ar1).toFile();
File file2 = Paths.get(dir, ar2).toFile();
File file3 = Paths.get(dir, ar3).toFile();
Producto p = new Producto(), p1, p2, p3;
try ( BufferedReader in1 = new BufferedReader(new FileReader(file1));
BufferedReader in2 = new BufferedReader(new FileReader(file2));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file3, false)))
){
String line1 = in1.readLine();
String line2 = in2.readLine();
while(line1 != null && line2 != null) {
p1 = p.toProducto(line1);
p2 = p.toProducto(line2);
if(p1.codigo.compareTo(p2.codigo) == -1){
out.println(line1);
line1 = in1.readLine();
continue;
}
if(p1.codigo.compareTo(p2.codigo) == 1){
out.println(line2);
line2 = in2.readLine();
continue;
}
p3 = new Producto(p1.codigo, p1.cantidad + p2.cantidad, Math.max(p1.precio, p2.precio));
out.println(p3);
line1 = in1.readLine();
line2 = in2.readLine();
}
while(line1 != null) {
out.println(line1);
line1 = in1.readLine();
}
while(line2 != null) {
out.println(line2);
line2 = in2.readLine();
}
} catch (IOException e){ System.out.println(e);}
}
ArrayList<String> salir(String dir, String ar3){
ArrayList<String> pros = new ArrayList<>();
File file3 = Paths.get(dir, ar3).toFile();
try (BufferedReader in = new BufferedReader(new FileReader(file3))){
String line = in.readLine();
while(line != null) {
pros.add(line);
line = in.readLine();
}
} catch (IOException e){ System.out.println(e);}
return pros;
}
}