2016-07-29 8 views
0

cliのコピーファイルのエントリをctrl + vでファイルエクスプローラに貼り付けたいと思っています。次のJavaコードはLinuxシェルでそれを行う方法ですか?ctrl + cをシミュレートしてbashのファイルをコピーする方法

public static void putFileToSystemClipboard(final File fileOut) throws Exception { 
     final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     final ClipboardOwner clipboardOwner = null; 

     final Transferable transferable = new Transferable() { 
      public boolean isDataFlavorSupported(final DataFlavor flavor) { 
       return false; 
      } 
      public DataFlavor[] getTransferDataFlavors() { 
       return new DataFlavor[] { DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor }; 
      } 
      public Object getTransferData(final DataFlavor flavor) { 
       if (flavor.equals(DataFlavor.javaFileListFlavor)) { 
        final List<String> list = new ArrayList<>(); 
        list.add(fileOut.getAbsolutePath()); 
        return list; 
       } 
       if (flavor.equals(DataFlavor.stringFlavor)) { 
        return fileOut.getAbsolutePath(); 
       } 
       return null; 
      } 
     }; 
     clipboard.setContents(transferable, clipboardOwner); 
    } 
+0

http://superuser.com/questions/288320/whats-like-osxs-pbcopy-for-linux – ewcz

+0

@ewcz(ほとんどのLinuxは、このFUNCを持っている)システム起動時にアプリの自動起動を作りますxclipを知っていますが、私は私のJavaコードを参照して、クリップボードにファイルを保存してから、ファイルエクスプローラで貼り付け(Ctrl + V)してください。 – asullaherc

+0

あなたのコードを理解する限り、絶対パスを入力してくださいクリップボード?その場合はおそらく 'readlink -f your_file | xclip -selection clipboard'は動作するはずです - ここで 'readlink -f'は' your_file'の絶対パスを返します... – ewcz

答えて

0

私は解決策を見つける:コード以下の短い

ラン "を/ tmp /ファイル・ツー・クリップ/なめらか" をコピーした後、私はするには、Ctrl + Vを打つことができます詳細

01用のThunarでは

public class FileToClip { 
    public static void main(final String[] args) throws Exception { 
     final File file = new File("/tmp/file-to-clip/smth"); 
     System.out.println("copy " + file.toString()); 
     new FileToClip().toClip(file); 

     Thread.sleep(Long.MAX_VALUE); 
    } 

    public void toClip(final File f) throws Exception { 
     final Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     final ClipboardOwner clipboardOwner = null; 

     final Transferable transferable = new Transferable() { 
      public boolean isDataFlavorSupported(final DataFlavor flavor) { 
       return false; 
      } 

      public DataFlavor[] getTransferDataFlavors() { 
       return new DataFlavor[]{DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor, gcf}; 
      } 

      public Object getTransferData(final DataFlavor flavor) { 
       if (flavor.equals(DataFlavor.javaFileListFlavor)) { 
        final List<String> list = new ArrayList<>(); 
        list.add(f.getAbsolutePath()); 
        return list; 
       } 

       if (flavor.equals(DataFlavor.stringFlavor)) { 
        return f.getAbsolutePath(); 
       } 

       if (flavor.equals(gcf)) { 
        String p = "copy\n" + 
          "file://" + f.getAbsolutePath(); 
        return new ByteArrayInputStream(p.getBytes(Charset.forName("UTF-8"))); 
       } 
       return null; 
      } 
     }; 
     clip.setContents(transferable, clipboardOwner); 
    } 

    DataFlavor gcf = createDataFlavor("x-special/gnome-copied-files", null, true); 

    public static DataFlavor createDataFlavor(@NotNull final String mimeType, @Nullable final Class<?> klass, final boolean register) { 
     try { 
      final DataFlavor flavor = 
        klass != null ? new DataFlavor(mimeType + ";class=" + klass.getName(), null, klass.getClassLoader()) : new DataFlavor(mimeType); 

      if (register) { 
       final FlavorMap map = SystemFlavorMap.getDefaultFlavorMap(); 
       if (map instanceof SystemFlavorMap) { 
        ((SystemFlavorMap) map).addUnencodedNativeForFlavor(flavor, mimeType); 
       } 
      } 

      return flavor; 
     } catch (ClassNotFoundException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

に貼り付け

は、すべてのコードは、IntelliJのアイデアthis source file(#getTransferDataを参照)

  • がどのように "X-特別な/のgnome-コピー・ファイル" のようにされたDataFlavor見つけるために見つけることができますか? 記載man xclip

-tは、

が所与のターゲット原子を使用して、特定のデータ形式を指定-target。 -oを指定すると、特別なターゲットアトム名 "TARGETS"を使用して、このセレクタの有効なターゲットアトムのリストを取得できます。ターゲット原子の詳細については、私は、ターゲット(JavaでのDataFlavor)

  • ヒットCtrl + C GUIで(ファイルエクスプローラ、またはコードを取得するには次の操作を行うことができICCCMセクション2.6.2

を参照してください。

UTF8_STRING 
TEXT 
STRING 
text/plain;charset=UTF-16 
text/plain;charset=UTF-8 
text/plain;charset=UTF-16BE 
text/plain;charset=UTF-16LE 
text/plain;charset=ISO-8859-1 
text/plain;charset=US-ASCII 
text/plain 
FILE_NAME 
text/uri-list 
text/uri-list;charset=UTF-16 
text/uri-list;charset=UTF-8 
text/uri-list;charset=UTF-16BE 
text/uri-list;charset=UTF-16LE 
text/uri-list;charset=ISO-8859-1 
text/uri-list;charset=US-ASCII 
x-special/gnome-copied-files 
:IDE)
  • XCLIP -selectionクリップボード-o -tは
  • 次のような出力をターゲットに私の質問から

    復帰、私は、CLIでファイルをコピーして、GUIに貼り付けた場合、私は

    • メイクスイングまたは(通知アイコン付き)JavaFXの背景アプリ
    • は、CLIでこのアプリを制御

      に必要ソケット
    • 私は、
    関連する問題