2016-12-31 4 views
2

Я пытаюсь скопировать файл в буфер обмена системы. Как я нашел в интернете, я пытаюсь добиться этого, как это:Скопируйте файл в буфер обмена

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?

+0

Этот вопрос приходит время от времени, но никогда не ответил. –

+0

Я экспериментировал с ним немного. Когда я копирую файлы из Finder (я нахожусь на Mac), буфер обмена, как видно из Java, заполняется вкусом «список файлов Java», а также множество других вкусов, которые кажутся представлениями списка файлов как String, Reader, char array и т. Д. Однако заполнение буфера обмена «списком файлов Java» не вдохновляет Finder на то, чтобы я вставлял эти файлы в папку. –

+0

Что действительно странно в том, что если я установил «список файлов Java» в буфер обмена, а затем сразу его извлечу, я получу «список файлов Java», как и ожидал. Но если я снова запустил свою программу Java и проверил буфер обмена, у нее появилось много новых представлений, похожих на те, которые я вижу при копировании из Finder. Так что, кажется, что-то добавляет буфер обмена после того, как моя программа Java размещает там контент. Возможно, это дело Mac. –

ответ

0

Вы можете использовать Terminal Command

String[] args = new String[] {"/bin/bash", "-c","Your command at terminal", "with", "args"}; 
Process proc = new ProcessBuilder(args).start(); 
+0

Это будет большая работа, так как вам придется реализовать ее для каждой ОС и даже для разных распределений одной и той же ОС отдельно – Raven

Смежные вопросы