如何在JAVA中获取剪贴板中文件的绝对路径并获取其粘贴位置

时间:2018-05-09 17:23:27

标签: java filepath

我是java的新手。如何将文件路径复制到剪贴板中,并获取粘贴的位置。 所以会有两个字符串

  • String copied = "c:\\somelocation.exe"
  • String paste= "d:\\somelocation.exe"

我不想实时,但它可以检测我的点击?

1 个答案:

答案 0 :(得分:1)

经过一番调查后,我发现,在一般中,您无法从Clipboard获取源文件的绝对路径。

选择文件并复制时;剪贴板包含文件内容,您只需从剪贴板读取InputStream即可。在这种情况下,您无法获取源文件的路径。

当您选择 big 文件时(我已尝试使用17Gb mkv),剪贴板包含此文件的路径。在这种情况下,您可以读取剪贴板并获取文件路径而不是内容。再一次,它取决于文件大小,我不知道Windows停止复制文件内容的文件大小,并开始将文件路径放到剪贴板。

在代码片段下方,当我获得Clipboard实例并检测到可能获取源文件路径时的两种可能情况:当剪贴板包含plaint stringlist of strings时。< / p>

public static void main(String... args) throws IOException, UnsupportedFlavorException {
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    String path = readAsString(clipboard);
    path = path == null ? readAsFileList(clipboard) : path;
}

private static String readAsFileList(Clipboard clipboard) {
    try {
        List<String> paths = (List<String>)clipboard.getData(DataFlavor.javaFileListFlavor);
        return paths.isEmpty() ? null : paths.iterator().next();
    } catch(Exception e) {
        e.printStackTrace();
        return null;
    }
}

private static String readAsString(Clipboard clipboard) {
    try {
        return (String)clipboard.getData(DataFlavor.stringFlavor);
    } catch(Exception e) {
        e.printStackTrace();
        return null;
    }
}