【发布时间】:2018-05-09 17:23:26
【问题描述】:
我是 java 的新手。如何获取我在剪贴板中复制的文件路径以及粘贴的位置。 所以会有两个字符串一个
String copied = "c:\\somelocation.exe"String paste= "d:\\somelocation.exe"
我不想要它实时,而是一种可以检测我点击的方式?
【问题讨论】:
我是 java 的新手。如何获取我在剪贴板中复制的文件路径以及粘贴的位置。 所以会有两个字符串一个
String copied = "c:\\somelocation.exe"String paste= "d:\\somelocation.exe"我不想要它实时,而是一种可以检测我点击的方式?
【问题讨论】:
经过一番调查,我发现,在一般中,您无法从Clipboard获取源文件的绝对路径。
当你选择一个小文件并复制它时;剪贴板包含文件内容,您所能做的就是从剪贴板中读取 InputStream。在这种情况下,您无法获取源文件的路径。
当您选择一个 大 文件(我已经用 17Gb mkv 尝试过)时,剪贴板包含该文件的路径。在这种情况下,您可以读取剪贴板并获取文件路径而不是内容。再次,它取决于文件大小,我不知道 Windows 停止复制文件内容并开始将文件路径放入剪贴板的文件大小。
在代码 sn-p 下方,当我得到一个 Clipboard 实例并检测到两种可能的情况时,可以获取源文件路径:当剪贴板包含 plaint string 或 list 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;
}
}
【讨论】:
clipboard 中有一行文件但没有字符串路径。
string,我的解决方案将有效。但是当您选择一个文件然后从上下文菜单中按复制时不会工作(这就是您想要的?)