Я пытаюсь скопировать файл в буфер обмена системы. Как я нашел в интернете, я пытаюсь добиться этого, как это:Скопируйте файл в буфер обмена
final List<File> files = new ArrayList<File>();
files.add(new File("pathToFile"));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
new Transferable() {
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor };
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.javaFileListFlavor.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
return files;
}
}, null);
Однако после того, как я запускаю этот код я не могу Ф.О. вставить файл из буфера обмена (пробовал на рабочем столе и в системном проводнике). Я даже попытался поспать после этого, потому что я прочитал, что JVM должен работать, чтобы аббревиатура вставить этот буфер обмена, но это не сработало для меня.
Тем не менее Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
возвращает соответствующий файл, который я скопировал в буфер обмена.
Одна вещь, которую я выяснил, это то, что Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.javaFileListFlavor);
возвращает false
. Означает ли это, что буфер обмена не поддерживает файлы? Это не имеет смысла, поскольку я могу копировать файлы вставки в проводнике с помощью Ctlr + C и Ctrl + V.
Я не знаю, важно ли это, но я выполняю свои тесты под Linux Mint.
Может кто-нибудь объяснить мне, почему я не могу вставить этот скопированный файл или как мне его скопировать, чтобы вставить его через систему Ctrl + V?
Этот вопрос приходит время от времени, но никогда не ответил. –
Я экспериментировал с ним немного. Когда я копирую файлы из Finder (я нахожусь на Mac), буфер обмена, как видно из Java, заполняется вкусом «список файлов Java», а также множество других вкусов, которые кажутся представлениями списка файлов как String, Reader, char array и т. Д. Однако заполнение буфера обмена «списком файлов Java» не вдохновляет Finder на то, чтобы я вставлял эти файлы в папку. –
Что действительно странно в том, что если я установил «список файлов Java» в буфер обмена, а затем сразу его извлечу, я получу «список файлов Java», как и ожидал. Но если я снова запустил свою программу Java и проверил буфер обмена, у нее появилось много новых представлений, похожих на те, которые я вижу при копировании из Finder. Так что, кажется, что-то добавляет буфер обмена после того, как моя программа Java размещает там контент. Возможно, это дело Mac. –