lunes, 18 de marzo de 2013

JF-AnalyzerDisk(Analizador de disco) desarrollado en java




Hoy les presento algo nuevo desarrollado netamente en java por mi,esta es una parte de unaaplicaciónque cree hacealgúntiempo para darle mantenimiento a la PC algoasícomo el Tuneup,el cual se llamada Fast-Madc y que espero seguir compartiendo partes de laaplicación.

¿Pero como Analizamos el Disco duro desde Java?
lo primero que se me vino a la mente para tan dura tarea es trabajar con las APIS de windows y para eso existe lalibreríaJNA(libreríanativa de java) pero como no tenia ni idea de como funciona los apis de windows y obviamente el trabajo con ellos iba hacer complicado, entonces para ahorrar trabajodecidíir por otro camino que es utilizar los comandos del DOS, como por ejemplo:

CHKDSK:se encarga de revisar el discos duros y dependiendo de su formato (NTFS o FAT) revisa la integridad de los archivos, la integridad del espacio en blanco, la de los indices, etc. para encontrar errores y corregirlos.
y utilizando los siguientes modificadores como:

/r(ComprobaciónNormal): Encuentra los sectores defectuosos y recupera la información que sea legible. El disco debe estar bloqueado.

/f (ComprobaciónIntensiva):Corrige los errores del disco. El disco debe estar bloqueado. Si chkdsk no consigue bloquear la unidad, aparecerá un mensaje que le preguntará si desea comprobar la unidad la próxima vez que reinicie el equipo.

una vez entendido que hace este comando y sus modificadores es tratar de ejecutar y controlar sus acciones desde java¿Pero como?

Con la claseRuntime
esta clase me permite ejecutar cualquier tipo de comando o programa externo que se desee llamar desde java.

El proceso del ComandoCHKDSK
para llevar este proceso y controlarlo necesito de un hilo(Thread), con el hilo podre ejecutar el comando y obtener respuesta de ello por medio de unBufferedReader que merecibirá los datos o las lineas deejecución,con estas lineas es donde podre controlar o hacer funcionarciertos objetos como el JProgressBar que me indicara el porcentaje del proceso en ejecución.

public  HiloEscritor(){
try{
String[] comando=new String[5];
comando[0]="CMD";
comando[1]="/C";
comando[2]="CHKDSK";
comando[3]=uni;
comando[4]=niv;
proc=Runtime.getRuntime().exec(comando);//comprobacion normal
br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
bre=new BufferedReader(new InputStreamReader(proc.getErrorStream()));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


Ahora esto solo funcionara cuando seescojalaopción comprobaciónnormal,encomprobaciónintensivano se puede lograr este proceso ya que mepidelaopciónreiniciar y nopodríapresentar esto por pantalla por quetendríaque teclearciertasopciones para llevar el proceso acabo, entonces lo que se meocurrióes crear un archivo por lotes otambiénllamado archivo .Bat y ejecutar este en tiempo deejecucióny que el usuario realice el proceso.

public static void crear()
{
FileWriter out1;
String dir1="comprobador\\";
String escri0=":inicio";
String escri1="@echo off";
String escri2="rem este programa comprueba el tamaño del archivo de registro, comprueba los archivos, índices y comprueba descriptores de seguridad.";
String escri3="rem este programa se llama comprueba.bat";
String escri4="echo Se procederá a la comprobación.";
String escri5="pause";
String escri6="chkdsk"+" "+"C:"+" "+"/f";
String escri7=":fin";
String escri8="echo Adiós";
String escri9="exit";
File archivo1 = new File(dir1+"OD.bat");
File archivoim = new File(dir1);
File archivoimg1 = new File(dir1);
if (archivo1.exists()){
archivo1.delete();
}
if (archivoim.exists()){
if(archivoimg1.exists() && !escri1.equals("") && !escri1.equals(" ")){
try{
out1 = new FileWriter(archivo1.getAbsolutePath(), true);
out1.write( escri0+("\r\n")+escri1+("\r\n")+escri2+("\r\n"));
out1.write( escri3+("\r\n")+escri4+("\r\n")+escri5+("\r\n"));
out1.write( escri6+("\r\n")+escri7+("\r\n")+escri8+("\r\n")+escri9+("\r\n"));
out1.close();
}
catch (Exception ev){}

}
}
}


de estafunciónforma creo mi archivo por lotes añadiendo el modificador /f, entonces este archivo deberá ser creado en tiempo de ejecución solo si el usuarioescogiólaopcióncomprobación intensiva , luego de ello sera llamado y el usuariodeberáde ingresar laopciónque le pide el bat.


luego que de haberterminadoel proceso en batpidieraque se reinicie el sistema entoncesaquíentra enacciónla clase reiniciar_pc, donde se mostrara un dialogo con un conteo de 5 segundos para poder cancelar laacciónde reiniciar esto si el usuario lo quiere caso contrario luego de culminar los 5 segundos entrara el proceso de reiniciar de la pc.


ahora lo ideal seria detectar el cierre del archivo por lotes y luego llamar a la clasereiniciar_pcpero asta ay no pude llegar.
Laaplicaciónes multilenguaje por el momento tiene las opciones Español y Ingles , espero puedan mejorar laaplicacióny corregirsiervascosas si llegaran a mejorarla y quieren compartirla me la pueden enviar yo con gusto lacompartirécon losdemás , espero les sirva para proyectos futuros.





Contraseña solo post del 2012: javafaceContraseña Actual: www.javaface-elblogdelprogramador.com

No hay comentarios:

Publicar un comentario