Bei der Suche nach dem, wie ich dies tun soll, fand ich eine vage Diskussion über verschiedene Optionen, wie JNI vs JNA, aber nicht viel in der Art von konkreten Beispielen.Was ist der einfachste Weg, eine Windows-Kernelfunktion von Java aus aufzurufen?
Kontext: Wenn Java File.renameTo()
nicht tun kann es die Aufgabe (egal aus welchem Grund, it is a little problematic), würde Ich mag wieder fallen diese native Windows-Funktion direkt verwenden, die in kernel32.dll definiert (from this answer):
BOOL WINAPI MoveFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName
);
Also, mit welcher Vorgehensweise, wie genau würden Sie diese Funktion innerhalb von Java-Code aufrufen? Ich suche den einfachsten Weg mit der minimalen Menge an nicht-Java-Code oder zusätzlichen Schritten (z. B. bei der Kompilierung oder Bereitstellung).
Ok, aber * wie * MoveFileW dann direkt aufrufen? Wie Matthew Flaschen vorschlägt, oder was? Ein paar Zeilen Beispielcode (wie Native.loadLibrary() usw.) würde geschätzt werden. – Jonik
Haben Sie mein Arbeitsbeispiel überprüft? – jitter
Danke für das JNA-Beispiel! Übrigens, wie würde die Schnittstelle nach MoveFileA aussehen (in Jitters Antwort erwähnt)? Einfach "MoveFileA" anstelle von "MoveFileW" zu verwenden war nicht gut. Ich versuche wirklich, ein Verzeichnis zu verschieben/umzubenennen, und konnte das nicht damit arbeiten lassen - obwohl ich nicht sicher bin, ob das wegen MoveFileW oder etwas anderem ist. – Jonik