Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/08/2008, 00:27
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error java.io.BufferedInputStream@1fb8ee3

Hola,

Creo que tienes algunos errores que producen que no obtengas el resultado, pero no me es posible corregirlos simplemente o hacerlo breve; así que agregue comentarios al código. En la parte final va una implementación para que puedas adaptarlo a tus necesidades.

Código:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class conectividad {

	public static void main(String[] args) throws IOException {
		// Process n1;
		Process n2;
		String hola = "Respuesta desde 192.168.1.1: bytes=32 tiempo<1m TTL=64";
		Runtime runtime = Runtime.getRuntime();
		/* 
		 * path --> C:\\batch.bat ó C:/batch.bat
		 * El caracter \ es el de escape.
		 * ver java.io.File.separator
		 */
		String path = "C://batch.bat";

		FileWriter archivoescritura = new FileWriter("c:\\conectividad.txt");
		PrintWriter archivoSalida = new PrintWriter(archivoescritura);

		n2 = runtime.exec(path);

		/*
		 * n2.getInputStream() --> Eso es un objeto y no estas trasladando
		 * los datos que mandó el proceso n2. Solamente el Objeto convertido a toString()
		 * algo como "java.io.BufferedInput...."
		 */
		archivoSalida.println(n2.getInputStream());

		/* 
		 * close() --> Posiblemente el proceso n2 todavía no ha terminado
		 * de escribir todo en su stream, el proceso todavía no ha salido.
		 */
		archivoSalida.close();

		File archivo1 = new File("c:\\conectividad.txt");
		/*
		 * Scanner --> Se utiliza para leer archivos de datos con formato,
		 * pero no tiene mucho sentido para leer sólo lineas en Strings.
		 */
		Scanner archivolectura = new Scanner(archivo1);
		while (archivolectura.hasNext()) {
			String linea = archivolectura.nextLine();

			/*
			 * linea --> Invariablemente va a imprimir algo como
			 * java.io.BufferedInputStream@XXX o algo parecido.
			 */
			System.out.println(linea);

			/*
			 * linea nunca va a ser igual a hola, por que es un
			 * string que dice "java.io.BufferedInputSt..."
			 */
			if (linea == hola) {
				System.out.println("Hay conectividad");
			} else {
				System.out.println("No hay conectividad");
			}

		}

	}

	public static void main2(String[] args) {
		String PING = "PING www.yahoo-ht3.akadns.net (69.147.76.15) 56(84) bytes of data.";
		
		try {
			java.lang.Process process = java.lang.Runtime.
				getRuntime().exec("/home/rand/batch.sh");

			process.waitFor();

			if (process.exitValue() == 0) {
				
				java.io.BufferedReader reader = new java.io.BufferedReader(
						new java.io.InputStreamReader(process.getInputStream()));
				String tester = reader.readLine();
				
				if (tester != null)
					System.out.println(tester.equals(PING) ? "Connected" : "Disconnected");
				else
					System.out.println("El proceso no devolvió nada.");
				
			} else {
				throw new java.lang.RuntimeException(
						"El proceso no se ejecutó correctamente.");
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}
	}

}
Saludos.

ps:

Error java.io.BufferedInputStream@1fb8ee3 :
No es una excepción, el código lo imprime con esta línea:
System.out.println(linea);
Por que en el String línea esta eso : "java.io.BufferedInputStream@1fb8ee3"

Última edición por HackmanC; 31/08/2008 a las 00:40 Razón: ps