【问题标题】:Make Java Swing Accept user input Path in Windows (copy paste path from explorer)使 Java Swing 接受 Windows 中的用户输入路径(从资源管理器复制粘贴路径)
【发布时间】:2013-01-03 18:52:51
【问题描述】:

您能帮我找到解决这个问题的方法吗?

我正在尝试使用 Swing 组件制作 Java GUI

界面应该接受某个文件的Windows路径,并在按下提交按钮后触发文件上的一组函数

现在我已经创建了组件来获取用户输入:

JTextField introducedPath1 = new JTextField(50);

我尝试更改通过从资源管理器复制粘贴路径获得的默认 Windows 路径到接受的文件路径:

File file;
String makeCanonicalPath=introducedPath1.getText().toString();
            makeCanonicalPath=makeCanonicalPath.replaceAll("\\", "/");
            file = new File(makeCanonicalPath);

但我不断收到此错误:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

\
 ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)

我认为这是由于 Windows 中的默认路径(例如:L:\practice\test)将其 '\' 解释为转义序列。

任何帮助或建议将不胜感激

【问题讨论】:

  • 如果你使用拖放,那么你可以得到一个 FileList 并得到实际的 File 对象。无需使用字符串进行猴子。例如,请在此处查看我的代码:drag and drop example

标签: java windows swing path user-input


【解决方案1】:

使用replaceAll,正则表达式需要使用java转义,所以

makeCanonicalPath.replaceAll("\\\\", "/");

因为它不是文本搜索替换,而是正则表达式。

如果您想要基于文本的搜索替换,请使用 apache commons string replace,例如。

另外,一种替代方法是使用 replace() - http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replace(char, char) 而不是 replaceAll - 它会在不使用正则表达式的情况下替换所有匹配项,并且由于您只有一个要替换的字符,所以它可以工作。

【讨论】:

  • 当 makeCanonicalPath.replaceAll("\\\\", "/");工作了吗? apache commons string replace 是更好的做法吗?
  • @user1944955 如果你想做基于文本的替换,最好使用某种文本替换机制。如果你真的想要正则表达式,那么当然,使用它。但你好像没有?
  • with replace() 我的解决方案将如下所示:文件 = 新文件(makeCanonicalPath1);由于 File 请求 String 作为输入。所以我不确定这是一个更好的解决方案。是吗?
  • @user1944955 String.replaceAll() 将参数视为regex 并且它完全不同地处理该参数(特别是反斜杠“\”和美元符号“$”)。 [查看Java Doc for replaceAll](docs.oracle.com/javase/1.4.2/docs/api/java/lang/…, java.lang.String))
  • 作为另一种选择,您还可以使用 Swing FileChooser 并允许用户以这种方式导航到他想要的文件。这完全消除了字符串和正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多