Ejemplos Prácticos de Programación de Servicios y Procesos en Java con ProcessBuilder
Ejemplos Prácticos de Programación de Servicios y Procesos
1. Consulta de IP mediante cURL
public class Ej2A_4 {
static void main() {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce la IP:");
String ip = sc.nextLine();
ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "curl http://ip-api.com/csv/" + ip);
try {
Process p = pb.start();
String linea = new String(p.getInputStream().readAllBytes());
String[] datos = linea.split(",");
if (datos[0].equals("success")) {
System.out.println("Localización: " + datos[4] + ", " + datos[1]);
} else {
System.out.println("No hay información");
}
} catch (Exception e) {
e.printStackTrace();
}
}
2. Ejecución y Control de Pings
public class EJ1C_4 {
static void main() {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el número de pings a hacer: ");
int pings = sc.nextInt();
ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "ping -n " + pings + " 8.8.8.8");
pb.redirectOutput(new File("pings.txt"));
try {
Process p = pb.start();
ProcessHandle ph = p.toHandle();
System.out.println("PID de proceso hijo: " + ph.pid());
} catch (Exception e) {
e.printStackTrace();
}
}
3. Laboratorio Médico: Procesos Concurrentes
Clase Principal de Laboratorio
public class Laboratorio {
public static final String RUTA = "out/production/ProcesosPsp";
static void main() {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el nombre del paciente");
String pc = sc.nextLine();
ProcessBuilder pb1 = new ProcessBuilder("java", "-cp", RUTA, "laboratorioNormal.labNorm.AnalizaOrina");
ProcessBuilder pb2 = new ProcessBuilder("java", "-cp", RUTA, "laboratorioNormal.labNorm.AnalizaSangre");
try {
Process p1 = pb1.start();
Process p2 = pb2.start();
int resultOr = p1.waitFor();
int resultSang = p2.waitFor();
System.out.println("Nombre paciente: " + pc);
System.out.println("Análisis completado");
if (resultOr == 0) {
System.out.println("Valores orina: OK");
} else if (resultOr == 1) {
System.out.println("Valores Orina: FUERA DE RANGO");
}
if (resultSang == 0) {
System.out.println("Valores Sangre: OK");
} else if (resultSang == 1) {
System.out.println("Valores Sangre: FUERA DE RANGO");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Clases de Análisis Médico (Orina y Sangre)
public class AnalizaOrina {
static void main() {
int resul = (int)(Math.random() * 2);
int esp = (int)(Math.random() * 5) - 1;
try {
Thread.sleep(esp * 1000);
System.exit(resul);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class AnalizaSangre {
static void main() {
int resul = (int)(Math.random() * 2);
int esp = (int)(Math.random() * 5) - 1;
try {
Thread.sleep(esp * 1000);
System.exit(resul);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. Laboratorio Avanzado con Ficheros
public class Laboratorio {
public static final String RUTA = "out/production/ProcesosPsp";
static void main() {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el nombre del fichero: ");
String fichero = sc.nextLine();
System.out.println("Introduce el nombre del paciente");
String pc = sc.nextLine();
ProcessBuilder pb1 = new ProcessBuilder("java", "-cp", RUTA, "laboratorioAvanzado.cuar.AnalizaOrina", fichero);
ProcessBuilder pb2 = new ProcessBuilder("java", "-cp", RUTA, "laboratorioAvanzado.cuar.AnalizaSangre", fichero);
try (BufferedWriter bw = new BufferedWriter(new FileWriter("informe.txt"))) {
bw.write("Informe de " + pc);
bw.newLine();
bw.write("===========================");
bw.newLine();
pb1.start();
pb2.start();
} catch (Exception e) {
e.printStackTrace();
}
}
AnalizaSangre Avanzado
public class AnalizaSangre {
static void main(String[] args) {
String fich = args[0];
try (BufferedReader br = new BufferedReader(new FileReader(fich));
BufferedWriter bw = new BufferedWriter(new FileWriter("informe.txt", true))) {
String linea = br.readLine();
String[] datos = linea.split(";");
bw.write("GLUCOSA: ");
if (Integer.parseInt(datos[2]) >= 70 && Integer.parseInt(datos[2]) <= 100) {
bw.write("OK");
} else {
bw.write("FUERA DE RANGO");
}
bw.newLine();
bw.write("COLESTEROL: ");
if (Integer.parseInt(datos[3]) < 200) {
bw.write("OK");
} else {
bw.write("FUERA DE RANGO");
}
bw.newLine();
bw.write("HEMOGLOBINA: ");
if (Integer.parseInt(datos[4]) >= 13 && Integer.parseInt(datos[4]) <= 17) {
bw.write("OK");
} else {
bw.write("FUERA DE RANGO");
}
bw.newLine();
} catch (Exception e) {
e.printStackTrace();
}
}
AnalizaOrina Avanzado
public class AnalizaOrina {
static void main(String[] args) {
String fich = args[0];
try (BufferedReader br = new BufferedReader(new FileReader(fich));
BufferedWriter bw = new BufferedWriter(new FileWriter("informe.txt", true))) {
String linea = br.readLine();
String[] datos = linea.split(";");
bw.write("LEUCOCITOS: ");
if (Integer.parseInt(datos[0]) >= 0 && Integer.parseInt(datos[0]) <= 5) {
bw.write("OK");
} else {
bw.write("FUERA DE RANGO");
}
bw.newLine();
bw.write("pH: ");
if (Double.parseDouble(datos[1]) >= 4.5 && Double.parseDouble(datos[1]) <= 8) {
bw.write("OK");
} else {
bw.write("FUERA DE RANGO");
}
bw.newLine();
} catch (Exception e) {
e.printStackTrace();
}
}
5. Control de Stock mediante Procesos
Clase Principal
public class Principal {
public static final int COD_Critico = 0;
public static final int COD_Bajo = 1;
public static final int COD_Suficiente = 2;
public static final String RUTA = "out/production/ProcesosPsp";
static void main() {
Scanner sc = new Scanner(System.in);
System.out.println("Introduce el nombre del archivo");
String archivo = sc.nextLine();
System.out.println("Introduce el producto");
String prod = sc.nextLine();
ProcessBuilder pb = new ProcessBuilder("java", "-cp", RUTA, "EJExamen2_2.part3.AnalizaStock", archivo, prod);
try {
Process p = pb.start();
int exitValue = p.waitFor();
if (exitValue == COD_Critico) {
System.out.println("Stock crítico");
} else if (exitValue == COD_Bajo) {
System.out.println("Stock bajo");
} else if (exitValue == COD_Suficiente) {
System.out.println("Stock suficiente");
}
} catch (Exception e) {
e.printStackTrace();
}
}
Clase AnalizaStock
public class AnalizaStock {
public static final int COD_Critico = 0;
public static final int COD_Bajo = 1;
public static final int COD_Suficiente = 2;
static void main(String[] args) {
String arch = args[0];
String prod = args[1];
int totalStock = obtenerStock(arch, prod);
int codFinal = obttenerCod(totalStock);
System.exit(codFinal);
}
public static int obtenerStock(String arch, String prod) {
int totalStock = 0;
try (BufferedReader br = new BufferedReader(new FileReader(arch))) {
String linea;
while ((linea = br.readLine()) != null) {
String[] prods = linea.split(";");
String prodNomb = prods[0];
String prodCant = prods[1];
if (prodNomb.equalsIgnoreCase(prod)) {
totalStock += Integer.parseInt(prodCant);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return totalStock;
}
public static int obttenerCod(int totalStock) {
int cod = 0;
if (totalStock <= 10) {
cod = COD_Critico;
} else if (totalStock >= 11 && totalStock <= 50) {
cod = COD_Bajo;
} else if (totalStock >= 51) {
cod = COD_Suficiente;
}
return cod;
}
}