Java - Identificar S.O

   
Vista:
Imágen de perfil de tesi

Identificar S.O

Publicado por tesi (37 intervenciones) el 21/10/2015 12:46:14
Buenas pues tengo este proyecto que os dejo adjunto con una clase, en la que el codigo esta en el Main y yo lo que quisiera es pasarlo como metodo encima del Main para poder llamarlo desde otro Proyecto porque si no no puedo de ninguna de las maneras llamarlo.
El problema es que esta parte de codigo que pongo aqui abajo para identificar el S.O al parecer necesita los argumentos del Main entonces al pasarlo como metodo arriba del main es mi Error.
Esa seria mi duda.. si se pudiera cambiar este trozo de codigo de abajo para poder ponerlo como metodo todo el codigo entero y ya si me dejaria instanciarlo en otro proyecto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Identificamos el sistema operativo para poder acceder por su ruta al
//fichero de forma correcta.
String osName = System.getProperty("os.name");
String [] a = null;
if (osName.toUpperCase().contains("WIN")){ //Windows
	if (args.length > 0)
		nombreFichero = args[0].replace("\\", "\\\\");
		//Hemos recibido la ruta del fichero en la línea de comandos
	else{
		nombreFichero = "buffer.txt";
		//Fichero que se utilizará por defecto
	}
}else{ //GNU/Linux
	if (args.length > 0)
		nombreFichero = args[0];
		//Hemos recibido la ruta del fichero en la línea de comandos
	else{
		nombreFichero = "buffer.txt";
		//Fichero que se utilizará por defecto
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet

Identificar S.O

Publicado por Lawliet zhapyro_5@hotmail.com (237 intervenciones) el 21/10/2015 17:36:23
Hola...

Únicamente necesitas pasar ese pedazo de código a un método o necesitas pasar todo el código que tienes en tu método Main a un método?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de tesi

Identificar S.O

Publicado por tesi (37 intervenciones) el 21/10/2015 18:01:17
Necesito pasar todo el codigo entero que tengo en el Main.
Con el trocillo ese me queria referir que ese era el que me daba errores por el "args"...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

Identificar S.O

Publicado por Alberto (237 intervenciones) el 21/10/2015 18:13:29
Hola...

Si ese es el caso, según a mi entendimiento solamente es una simple pasadera de parámetros, donde tu método recibiría como parámetros un arreglo del tipo String (Que en esencia eso son los arguments en Java), y solamente necesitas llamar a tu método desde tu Main o cualquier otra clase pero pasando como parámetros ese arreglo ^^...

Main

1
2
3
public static void main(String[] args) {
	ficheroArgumentos(args);
}

Método

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public static void ficheroArgumentos(String[] argumentos){
	File archivo=null;
	String nombreFichero = "";
	try{
		//Rediregimos salida y error estándar a un fichero
		//Al quitar el ",true" de File borrar el fichero siempre al comienzo.
		PrintStream ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(
						 new File("javalog_suministrador.txt"))), true);
		// Redirigir la salida estándar al fichero javalog_suministrador.txt
		System.setOut(ps);
		// Redirigir la salida de error estándar al fichero javalog_suministrador.txt
		System.setErr(ps);
	}catch(Exception e){
		System.err.println("Suministrador. No he podido redirigir salidas.");
	}
	//Identificamos el sistema operativo para poder acceder por su ruta al
	//fichero de forma correcta.
	String osName = System.getProperty("os.name");
	String [] a = null;
	if (osName.toUpperCase().contains("WIN")){ //Windows
		if (argumentos.length > 0)
			nombreFichero = argumentos[0].replace("\\", "\\\\");
			//Hemos recibido la ruta del fichero en la línea de comandos
		else{
			nombreFichero = "buffer.txt";
			//Fichero que se utilizará por defecto
		}
	}else{ //GNU/Linux
		if (argumentos.length > 0)
			nombreFichero = argumentos[0];
			//Hemos recibido la ruta del fichero en la línea de comandos
		else{
			nombreFichero = "buffer.txt";
			//Fichero que se utilizará por defecto
		}
	}
	archivo = new File(nombreFichero);
	// Borramos el archivo si existe y lo creamos de nuevo para vaciar el contenido.
	archivo.delete();
	try {
		archivo.createNewFile();
	}catch(IOException ioe) {
		ioe.printStackTrace();
	}
	// Se genera un numero aleatorio entre el 1 y el 10, es la cantidad de datos que va a escribir en el fichero de datos
	int veces=(int) Math.round (Math.random()*9)+1; // de 1 a 10.
		System.out.println("Se va ha realizar "+veces+" veces.");
	RandomAccessFile raf = null;
	FileLock bloqueo = null;
	for (int i=0;i<veces;i++){//escribiremos las veces que nos diga la variable "veces" de datos.
		// Se genera un numero aleatorio entre el 1 y el 10.
		int numAleatorios=(int) Math.round (Math.random()*(99-(-99)+1)-99); // de -99 a 99 (HASTA-DESDE+1)+DESDE); 
		System.out.println(numAleatorios);
		try{
			//Abrimos el fichero en lectura y escritura permitiendo sincronismo
			raf = new RandomAccessFile(archivo,"rwd");
			//***************
			//Sección crítica
			bloqueo = raf.getChannel().lock();
			//bloqueamos el canal de acceso al fichero. Obtenemos el objeto que
			//representa el bloqueo para después poder liberarlo
			System.out.println("Suministrador: ENTRA sección");
			// Lectura del fichero
			// comprueba si el fichero está vacío
			if (raf.length() == 0){
			   raf.writeInt(numAleatorios); //escribimos el valor
			   System.out.println("Suministrador: valor escrito " + numAleatorios);
			   //i ++;
			}else
				System.out.println("Suministrador: no puede escribir.");
			System.out.println("Suministrador: SALE sección");
			bloqueo.release(); //Liberamos el bloqueo del canal del fichero
			bloqueo = null;
			//Fin sección crítica
			//*******************
			Thread.sleep(500); //Simulamos tiempo de creación del dato
		}catch(Exception e){
			System.err.println("Suministrador. Error al acceder al fichero.");
			System.err.println(e.toString());
		}finally{
			try{
				if( null != bloqueo)
					bloqueo.release(); // liberar el bloqueo del canal del fichero
				if( null != raf )
					raf.close();  // cerrar el fichero
			}catch (Exception e2){
				System.err.println("Suministrador. Error al cerrar el fichero.");
				System.err.println(e2.toString());
				System.exit(1);  //Si hay error, finalizamos
			}
		}
	}
}

No lo probé ya que solo adecue el código, no deberías tener problemas a mi punto de vista, al menos que te haya entendido mal ^^!!... Cualquier cosa, aquí estamos al pendiente. Saludos!

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de tesi

Identificar S.O

Publicado por tesi (37 intervenciones) el 22/10/2015 12:24:45
Buenas!

Mire hice eso como me dijiste y el proyecto "Suministrador" esta OK, pero al instanciarlo en el proyecto "ejer1_psp" y lanzar el proceso suminstrador no me funciona...
Se que es por los args argumentos, porque no los coge del public static void main(String[] args) de lo que viene siendo el main.. entonces ahi es donde estoy atrancado..

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Identificar S.O

Publicado por Lawliet zhapyro_5@hotmail.com (237 intervenciones) el 22/10/2015 19:09:31
Hola...

Es correcto que no te funcione ya que son dos proyectos totalmente distintos, eso significa que un proyecto no puede ver lo que el otro tiene, por ponerte un ejemplo teórico: Tenemos dos ciudades separadas CiudadX y CiudadY, en la primer ciudad tenemos autos pero no refacciones, y en la segunda ciudad tenemos refacciones pero no autos, entonces si hacemos un puente entre ellas ambas ciudades podrán conseguir los recursos para poder completarse.

Con base a esto, necesitas un "puente" que permita a tu proyecto ver lo del otro proyecto, la solución es que tu primer proyecto solamente tenga los métodos que necesitas sin necesidad del método Main, y en el segundo ya tengas el método Main que es la entrada de tu programa y así llamar los métodos del otro.

¿Pero como hacerlo?... ¡Facil!... Exporta tu primer proyecto como un archivo .jar (Encontraras infinidad de ejemplos de como exportarlo en Internet), y posteriormente Importa ese archivo que creaste (.jar) a tu proyecto que quieres que contenga tus métodos, de esa manera tu proyecto podrá ver todos los métodos que tengas en el primer proyecto.

Sin mas que comentar, cualquier duda y/o inconveniente, estamos al pendiente. Suerte!

P.D. Puedes agregarme al Skype mediante mi correo electrónico (Se encuentra a un lado de mi nombre ^^) y con gusto puedo explicarte todas tus inquietudes sin compromiso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de tesi

Identificar S.O

Publicado por tesi (37 intervenciones) el 22/10/2015 19:56:16
Buenas!
Te entendi perfectamente, claro todo eso ya lo tenia hecho. De echo como te mostrare aqui debajo ahora he dejado comentado esta parte y asi si que me funciona todo a la perfeccion pero si ejecutas estos proyectos en un sistema Linux ya supongo que no funcionaria. De echo sigo realizando mi actividad pero ya te digo con este trocito de codigo comentado solo he dejado el " nombreFichero = "buffer.txt"; ".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Identificamos el sistema operativo para poder acceder por su ruta al fichero de forma correcta.
////	String osName = System.getProperty("os.name");
////	if (osName.toUpperCase().contains("WIN")){ //Windows
////            if (args.length > 0)
////                nombreFichero = args[0].replace("\\", "\\\\");
////                //Hemos recibido la ruta del fichero en la línea de comandos
////            else{
                nombreFichero = "buffer.txt";
////                //Fichero que se utilizará por defecto
////            }
////	}else{ //GNU/Linux
////            if (args.length > 0)
////                nombreFichero = args[0];
////                //Hemos recibido la ruta del fichero en la línea de comandos
////            else{
////                nombreFichero = "buffer.txt";
////                //Fichero que se utilizará por defecto
////            }
////	}
PD: Gracias por todo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

Identificar S.O

Publicado por Alberto (237 intervenciones) el 22/10/2015 21:51:59
Java, es un lenguaje que te permite crear aplicaciones multiplataforma, esto es gracias a que Java utiliza la maquina virtual que viene dentro de nuestro paquete Java cuando lo instalamos, por lo tanto de esa manera funcionara nuestra aplicación con todos aquellos sistemas que tengan software Java en su sistema; es decir, tengan instalado Java ^^.

Sin embargo, cuando trabajamos con archivos es importante mencionar una diferencia entre un sistema Windows con un sistema basado en Linux. La forma en que nosotros accedemos a las rutas de nuestras carpetas, a continuación, te muestro la forma en que Java reconoce una ruta de Windows y una ruta de Linux.

Windows.
String path = "C:\\Users\\Carpeta\\archivo.txt";

Linux.
String path = "users/carpeta/archivo.txt";

De esa manera podrás leer archivos de tus directorios dependiendo el sistema operativo, la lógica o el proceso que tengas que hacer con ese archivo es el mismo para ambos sistemas, ya que como te mencione anteriormente, Java es un lenguaje multiplafatorma.

Te invito a leer documentación básica de Java, de esa manera conocerás mas al lenguaje, su funcionalidad, características, entre otras cosas que estoy seguro cualquier programador o programadora Java, debe saber ^^.

Sin mas que comentar, cualquier duda y/o inconveniente aquí estamos. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar