Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Identificar S.O

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.
*********************************************************************************************************
//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
}
*******************************************************************************************
-------------------------------------------------------
package su;
import java.io.File;
import java.io.RandomAccessFile;
import java.io.PrintStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileLock;
public class Su {
public void AQUI {

}
public static void main(String[] args) {
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_su.txt"))), true);
// Redirigir la salida estándar al fichero javalog_su.txt
System.setOut(ps);
// Redirigir la salida de error estándar al fichero javalog_su.txt
System.setErr(ps);
}catch(Exception e){
System.err.println("Su. 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 (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
}
}
******************************************************************************************************
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("Su: 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("Su: valor escrito " + numAleatorios);
//i ++;
}else
System.out.println("Su: no puede escribir.");
System.out.println("Su: 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("Su. 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("Su. Error al cerrar el fichero.");
System.err.println(e2.toString());
System.exit(1); //Si hay error, finalizamos
}
}
}
}
}

octubre 21, 2015 | Registered Commentertesi

XD a me trae tantos recuerdos este tipo de preguntas, por eso te contestaré aunque debo recordar que no es la manera de preguntar y más que para saber el nombre del S.O esta en la primera linea del codigo que pones, lo que da a pensar que no te has esforzado lo suficiente para entenderlo, pero no te ofendas con lo que te dije son errores que uno comete de novato (ser algo flojo y eso, o lo contrario ser aplicado y ser un poco espeso para entender lo que fue mi caso :( jaja) asi que no te enojes por lo que te dije y ponte las pilas :) que los programadores eso somos gente pilas.

Ahora si a al grano


//Identificamos el sistema operativo

String osName = System.getProperty("os.name");//aqui obtienes el nombre del sistema operativo y no necesitas más

si quieres saber que es windows
pues asi
if (osName.toUpperCase().contains("WIN")){ //Windows
}
else{
// cualquier otro,

}
en el caso de tu código querían saber el formato de las rutas
como es sabido todos los S.O (o por lo menos los más conocidos mac,distribución GNU/linux, BSD, etc) a excepción de windows (e imagino que otros por ahí)están basados en UNIX y por eso tienen el mismo formato de ruta, ahora si tu estas identificando el nombre del S.O para otra cosa
deberias tener más if como el de arriba para poder hacer lo que quieras dependiendo del S.O

octubre 27, 2015 | Unregistered Commenterjhosep

Muchas gracias por tu respuesta :)

octubre 29, 2015 | Registered Commentertesi