2013-01-03 52 views
2

您能否帮我找到解决此问题的解决方案?在Windows中制作Java Swing接受用户输入路径(从资源管理器复制粘贴路径)

我试图与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:\实践\测试)得到它“\”解释为逃逸序列。

任何帮助或建议,可以理解

+0

如果使用拖放操作,则可以获取FileList并获取实际的File对象。没有必要用字符串猴子。例如,请查看我的代码:[拖放示例](http://stackoverflow.com/a/13597312/522444) –

回答

3

用的replaceAll,你需要使用的Java转义正则表达式,所以

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

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

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

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

+0

为什么使用apache commons字符串替换时,makeCanonicalPath.replaceAll(“ \\\\“,”/“);工作? apache commons string取代了更好的做法吗? – user1944955

+0

@ user1944955如果您想进行基于文本的替换,最好使用某种文本替换机制。如果你真的想要正则表达式,那么一定要使用它。但它看起来不像你呢? – eis

+0

with replace()我的解决方案如下所示:String makeCanonicalPath1 = introduPath1.getText()。replace(“\\”,“/”)。toString(); file = new File(makeCanonicalPath1);由于文件请求字符串作为输入。所以我不确定这是否是一个更好的解决方案。是吗? – user1944955

相关问题