是否可以使用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
。 如果是,则需要迭代内容( File
的java.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