Hola! como bien te dicen puedes hacer uso de la JNI, yo apenas ayer la use, necesitaba usar el nombre corto ( formato 8.3 ) de los archivos en windows, pues desde mi programa java ejecutaba otro que recibe parametros desde la consola.
aqui te dejo un ejemplo, espero te sirva.
////////////////////// ARCHIVO Main.h ///////////////////////////////
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Main */
#ifndef _Included_Main
#define _Included_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Main
* Method: getShortPathName
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Main_getShortPathName
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
//////////////////////// ARCHIVO Main.c /////////////////////////////////
#include <jni.h>
#include <stdio.h>
#include <windows.h>
#include "Main.h"
JNIEXPORT jstring JNICALL Java_Main_getShortPathName
(JNIEnv *env, jobject o, jstring thePath) {
long lResult = 0;
WCHAR buff[255];
const jchar *utfPath = (*env)->GetStringChars(env,thePath,NULL);
lResult = GetShortPathNameW(utfPath,buff,255);
(*env)->ReleaseStringChars(env,thePath,utfPath);
return (*env)->NewString(env,buff,lResult);
}
//////////////////////// Main.java ////////////////////////////////
public class Main {
private native String getShortPathName(String thePath);
public static void main(String[] args) {
Main app = new Main();
System.out.println(app.getShortPathName("C:\\Documents and Settings");
}
static {
System.loadLibrary("api");
}
}
para compilar la dll use mingw asi:
gcc -c -I"aqui el path de tu java\include" -I"aqui el path de tu java\include\win32" -o api.o Main.c
y despues....
gcc -shared -o api.dll api.o api.def
el archivo def tiene la funcion que vas a exportar asi:
EXPORTS
Java_Main_getShortPathName