【问题标题】:How to get absolute path of a file in clipboard in JAVA and get the location where it is pasted如何在JAVA中获取剪贴板中文件的绝对路径并获取粘贴的位置
【发布时间】:2018-05-09 17:23:26
【问题描述】:

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

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

我不想要它实时,而是一种可以检测我点击的方式?

【问题讨论】:

    标签: java filepath


    【解决方案1】:

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

    当你选择一个文件并复制它时;剪贴板包含文件内容,您所能做的就是从剪贴板中读取 InputStream。在这种情况下,您无法获取源文件的路径。

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

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

    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;
        }
    }
    

    【讨论】:

    • 线程“主”java.awt.datatransfer.UnsupportedFlavorException 中的异常:sun.awt.datatransfer.SunClipboard.getData(SunClipboard.java:220) 处的 Unicode 字符串
    • 这意味着在您的clipboard 中有一行文件但没有字符串路径。
    • 然后描述你想要什么。如果您复制带有文件完整路径的string,我的解决方案将有效。但是当您选择一个文件然后从上下文菜单中按复制时不会工作(这就是您想要的?)
    • 是的,我希望当我复制一个文件或文件夹并运行我的 java 程序时,它应该显示该文件或文件夹的路径
    • 那我得想想。我不确定您是否复制了整个文件,源路径存储到剪贴板中。剪贴板包含文件内容但不包含文件路径。
    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2011-01-11
    相关资源
    最近更新 更多