I\'m currently working on Java code that can copy files into the system clipboard.
For Windows and Linux I already got it working. For OSX I tried several flavors bu
Maybe you should try DataFlavor#javaFileListFlavor.
Excerpt from the API documentation:
DataFlavor#javaFileListFlavor (Link)
To transfer a list of files to/from Java (and the underlying platform) a DataFlavor of this type/subtype and representation class of java.util.List is used. Each element of the list is required/guaranteed to be of type java.io.File.
I did a small investigation and here is the answer:
It should work with
DataFlavor#javaFileListFlavor
but the copy-paste functionality for files is broken on the native side for all JDKs that are based on OpenJDK.
The OpenJDK implementation uses NSPasteboard.sendData
method with the format NSFilenamesPboardType
. Unfortunately, NSFilenamesPboardType is deprecated and removed after 10.14.
So the functionality worked in 10.13 and before but is broken after the version.
There are a couple of possible solutions:
I've found the NSPasteboardAPI library that provides proper native API. Here is the java implementation based on the library.
I've fixed the problem in the JetBrains Runtime on the native side so it just works with DataFlavor#javaFileListFlavor
as you expected.
It is funny that the problem exists for ~10 years at this moment. I believe it will be also fixed in some upcoming OpenJDK versions, but I am not sure when.