Mientras buscaba cómo hacer esto, encontré una discusión vaga sobre diferentes opciones, como JNI vs JNA, pero no mucho en cuanto a ejemplos concretos.¿Cuál es la forma más fácil de llamar a una función de kernel de Windows desde Java?
Contexto: si Java de File.renameTo()
no puede hacer su trabajo (por cualquier razón; it is a little problematic), me gustaría volver a caer a directamente a través de esta función nativa de Windows, que se define en kernel32.dll (from this answer):
BOOL WINAPI MoveFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName
);
Entonces, usando cualquier enfoque, ¿cómo llamarías exactamente esa función desde dentro del código Java? Estoy buscando la forma más sencilla, con la cantidad mínima de código que no es Java o pasos adicionales (por ejemplo, en compilación o implementación).
Bien, pero * cómo * llamar a MoveFileW directamente entonces? Como sugiere Matthew Flaschen, o qué? Algunas líneas de código de ejemplo (como cómo usar Native.loadLibrary() etc) serían apreciadas. – Jonik
¿Revisaste mi ejemplo de trabajo? – jitter
¡Gracias por el ejemplo de JNA! Por cierto, ¿cómo buscaría la interfaz MoveFileA (mencionado en la respuesta de jitter)? Simplemente usar "MoveFileA" en lugar de "MoveFileW" no era bueno. Intento mover/cambiar el nombre de un directorio y no pude hacerlo funcionar, aunque no estoy seguro de si eso se debe a MoveFileW u otra cosa. – Jonik