是否可以使用awt.Toolkit和java中的剪贴板知道剪贴板中复制的内容是否是mp3文件

我正在尝试编写一个在后台运行的代码,并监视复制.mp3 文件包含 .mp3文件的文件的复制操作

{ Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); if (cb.isDataFlavorAvailable(DataFlavor.javaFileListFlavor)) { try { String name = ""+cb.getData(DataFlavor.javaFileListFlavor); boolean found = false; if (name.toLowerCase().endsWith(".mp3]")) { System.out.println("Is MP3"); found = true; } if (!found) { System.out.println("Is not MP3"); } } catch(UnsupportedFlavorException ex) { ex.printStackTrace(); } catch(IOException ex) { ex.printStackTrace(); } } } 

基本上,是的。 您需要检查Clipboard内容以查看它是否支持DataFlavor.javaFileListFlavor DataFlavor 。 如果是,则需要迭代内容( Filejava.util.List )并确定内容。

以下只检查文件是否是.mp3文件(通过检查名称扩展名),但是检查isDirectory并对目录进行递归检查并不困难……

 Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); if (cb.isDataFlavorAvailable(DataFlavor.javaFileListFlavor)) { try { List files = (List) cb.getData(DataFlavor.javaFileListFlavor); boolean found = false; for (Object o : files) { if (o instanceof File) { File f = (File) o; if (f.getName().toLowerCase().endsWith(".mp3")) { System.out.println("I haz MP3"); found = true; } } } if (!found) { System.out.println("I notz haz MP3"); } } catch (UnsupportedFlavorException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } 

我的建议是: http : //msdn.microsoft.com/en-us/library/ff468802(v = vs。85).aspx

使用本机Windows C函数和用户JNA(Java本机访问库)来完成您的需求。 JNA: https : //github.com/twall/jna