Tengo una aplicación en la que deseo escuchar cualquier cambio realizado en un directorio en particular. La aplicación debe hacerme un ping tan pronto como haya archivos agregados, eliminados o actualizados en ese directorio.Oyente de directorio en Java
Respuesta
Puede utilizar JNotify
JNotify es una biblioteca de Java que permite la aplicación java para escuchar a presentar eventos del sistema, tales como: El archivo creado del archivo modificado archivo renombrado suprimido compatibles plataformas
Windows (2000 o posterior) Notas de Windows Linux con soporte INofity (2.6.14 o más reciente) Notas de Linux Mac OS X (1 0.5 o más reciente ) Mac OS señala
Más información:
Descargar JNotify de here
Extracto de la cremallera, puesto .dll/.so según la plataforma en su camino lib. y crea una clase proporciona jnotify-0.93.jar
en la ruta de la clase.
Código de ejemplo:
package org.life.java.stackoverflow.questions;
import net.contentobjects.jnotify.JNotify;
import net.contentobjects.jnotify.JNotifyListener;
/**
*
* @author Jigar
*/
public class JNotifyDemo {
public void sample() throws Exception {
// path to watch
String path = System.getProperty("user.home");
// watch mask, specify events you care about,
// or JNotify.FILE_ANY for all events.
int mask = JNotify.FILE_CREATED
| JNotify.FILE_DELETED
| JNotify.FILE_MODIFIED
| JNotify.FILE_RENAMED;
// watch subtree?
boolean watchSubtree = true;
// add actual watch
int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener());
// sleep a little, the application will exit if you
// don't (watching is asynchronous), depending on your
// application, this may not be required
Thread.sleep(1000000);
// to remove watch the watch
boolean res = JNotify.removeWatch(watchID);
if (!res) {
// invalid watch ID specified.
}
}
class Listener implements JNotifyListener {
public void fileRenamed(int wd, String rootPath, String oldName,
String newName) {
print("renamed " + rootPath + " : " + oldName + " -> " + newName);
}
public void fileModified(int wd, String rootPath, String name) {
print("modified " + rootPath + " : " + name);
}
public void fileDeleted(int wd, String rootPath, String name) {
print("deleted " + rootPath + " : " + name);
}
public void fileCreated(int wd, String rootPath, String name) {
print("created " + rootPath + " : " + name);
}
void print(String msg) {
System.err.println(msg);
}
}
public static void main(String[] args) throws Exception {
new JNotifyDemo().sample();
}
}
Salida:
modified C:\Documents and Settings\jigar: LOCALS~1\Temp\etilqs_4s8ywsvyukghK0uDxRop
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\etilqs_4s8ywsvyukghK0uDxRop
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\output1295531079119
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default
deleted C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001ea9
created C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eae
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\etilqs_04gchL79ZJrpClZIqiom
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\etilqs_04gchL79ZJrpClZIqiom
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eae
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eae
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\output1295531079119
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Current Session
deleted C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001ea8
created C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eaf
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\etilqs_04gchL79ZJrpClZIqiom
modified C:\Documents and Settings\jigar : LOCALS~1\Temp\etilqs_04gchL79ZJrpClZIqiom
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eaf
modified C:\Documents and Settings\jigar : Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\f_001eaf
Jnotificar para notificación de archivos en java. Ejemplo de código
public void sample() throws Exception {
// path to watch
String path = System.getProperty("user.home");
// watch mask, specify events you care about,
// or JNotify.FILE_ANY for all events.
int mask = JNotify.FILE_CREATED |
JNotify.FILE_DELETED |
JNotify.FILE_MODIFIED |
JNotify.FILE_RENAMED;
// watch subtree? boolean watchSubtree = true;
// add actual watch
int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener());
// sleep a little, the application will exit if you
// don't (watching is asynchronous), depending on your
// application, this may not be required
Thread.sleep(1000000);
// to remove watch the watch
boolean res = JNotify.removeWatch(watchID);
if (!res) {
// invalid watch ID specified.
}
}
class Listener implements JNotifyListener
{
public void fileRenamed(int wd, String rootPath, String oldName,
String newName) {
print("renamed " + rootPath + " : " + oldName + " -> " + newName); }
public void fileModified(int wd, String rootPath, String name)
{ print("modified " + rootPath + " : " + name); }
public void fileDeleted(int wd, String rootPath, String name) {
print("deleted " + rootPath + " : " + name); }
public void fileCreated(int wd, String rootPath, String name) {
print("created " + rootPath + " : " + name); }
void print(String msg) {
System.err.println(msg); }
}
cuando corro el programa me da la carga de bibliotecas exceptionError, java.library.path = C: \ Archivos de programa \ Java \ jdk1.7.0 \ bin;.; C: \ Windows \ Sun \ Java \ bin; C: \ Windows \ system32; C: \ Windows; C: \ Windows; C: \ Windows \ system32; C: \ Windows \ system32 \ Wbem; \ WindowsPowerShell \ v1.0 \; C: \ Archivos de programa \ Microsoft SQL Server \ 90 \ Tools \ binn \; C: \ apache-tomcat-6.0.26 \ bin; C: \ Archivos de programa \ Java \ jdk1 .7.0 \ bin; C: \ Archivos de programa \ TortoiseSVN \ bin; C: \ Archivos de programa \ masilla; C: \ Archivos de programa \ Google \ Chrome \ Aplicación; C: \ Archivos de programa \ Java \ jdk1.7.0 \ include Excepción en el hilo "principal" java.lang.Unsa – Jinith
1.- Haga clic con el botón derecho en el Proyecto 2.- Propiedades 3.- Haga clic en EJECUTAR 4.- Opciones de VM: java -Djava.library.path = "your_path" 5.- por ejemplo en mi caso: java -Djava.library.path = Users/Lexynux/NetBeansProjects/NAO/libs> 6.- Ok –
Desde Java 1.7 se puede utilizar el Watch Service API para inscribirse en los eventos de directorio. Es parte de la biblioteca New I/O (NIO) de Java y no requiere ningún recurso adicional. Un ejemplo de cómo usar la API se puede encontrar en el official documentation.
Después de registrar el WatchService puede recuperar eventos para la ruta de destino de esta manera:
for (WatchEvent<?> event: key.pollEvents()) {
// Context for directory entry event is the file name of entry
WatchEvent<Path> ev = cast(event);
Path name = ev.context();
Path child = dir.resolve(name);
// print out event
System.out.format("%s: %s\n", event.kind().name(), child);
}
- 1. Oyente de acciones Java
- 2. Oyente de extremo de subproceso. Java
- 3. Oyente de clave Java en la línea de comando
- 4. Oyente de creación de subprocesos
- 5. Java: ¿dónde debería poner código de lógica de oyente anónimo?
- 6. El oyente de Java debe heredar de java.util.EventListener, ¿por qué?
- 7. ¿Cómo hacer un oyente de base de datos con Java?
- 8. Android, oyente Checkbox en XML?
- 9. Oyente de red Android
- 10. directorio java hsperfdata
- 11. Búsqueda recursiva de un directorio en Java
- 12. Parada del oyente en Android
- 13. Oyente para Fin de llamada en Android
- 14. dependencia inyectar servlet oyente
- 15. Oyente de Doctrina versus Suscriptor
- 16. androide cambio de idioma oyente
- 17. jmeter - oyente interpretación de resultados
- 18. OnCompletion oyente con MediaPlayer
- 19. Eliminar un directorio al salir en Java
- 20. Obtener el directorio raíz predeterminado en Java
- 21. ExtJS eliminar oyente
- 22. ¿Dónde está mi directorio java?
- 23. Estructura de directorio de interfaces Java?
- 24. Detalles del directorio de Windows temp (Java)
- 25. java 7 preguntas de supervisión del directorio
- 26. Pruebas unitarias Java, diseño de directorio
- 27. Botón OnClick Oyente en diseños incluidos
- 28. jquery resize oyente en un div
- 29. Reconectando el oyente JMS a JBossMQ
- 30. Onlclick oyente no funciona correctamente ..?
* Downvoters * por favor comente –
Cuando ejecuto el programa me da exceptionError loading library, java.library.path = C : \ Archivos de programa \ Java \ jdk1.7.0 \ bin;.; C: \ Windows \ Sun \ Java \ bin; C: \ Windows \ system32; C: \ Windows; C: \ Windows; C: \ Windows \ system32; C: \ Windows \ system32 \ Wbem; \ WindowsPowerShell \ v1.0 \; C: \ Archivos de programa \ Microsoft SQL Server \ 90 \ Tools \ binn \; C: \ apache-tomcat-6.0.26 \ bin; C: \ Archivos de programa \ Java \ jdk1.7.0 \ bin; C: \ Archivos de programa \ TortoiseSVN \ bin; C: \ Archivos de programa \ masilla; C: \ Archivos de programa \ Google \ Chrome \ Aplicación; C: \ Archivos de programa \ Java \ jdk1.7.0 \ include Excepción en el hilo "main" java.lang.Unsa – Jinith
'Extraiga el zip, ponga .dll/.so de acuerdo con la plataforma en su ruta de acceso lib. –