如何在Java中转义命令行参数(文件路径)中的斜杠?
请注意,我是在Windows下使用NetBeans开发的。我还运行JDK1.8 程序通过命令行接受一些参数。一个参数是文件路径。用户可能会键入-ic:\test。我怎样才能逃过刀口?似乎什么都不对劲如何在Java中转义命令行参数(文件路径)中的斜杠?,java,command-line,escaping,command-line-arguments,slash,Java,Command Line,Escaping,Command Line Arguments,Slash,请注意,我是在Windows下使用NetBeans开发的。我还运行JDK1.8 程序通过命令行接受一些参数。一个参数是文件路径。用户可能会键入-ic:\test。我怎样才能逃过刀口?似乎什么都不对劲 public class Test { public static void main(String[] args) throws FileNotFoundException, ParseException { // Simulate command line execut
public class Test {
public static void main(String[] args) throws FileNotFoundException, ParseException {
// Simulate command line execution
String[] arguments = new String[] { "-i C:\test" };
// Create Options object
Options options = new Options();
// Add options input directory path.
options.addOption("i", "input", true, "Specify the input directory path");
// Create the parser
CommandLineParser parser = new GnuParser();
// Parse the command line
CommandLine cmd = parser.parse(options, arguments);
String inputDirectory = cmd.getOptionValue("i");
String escaped;
// Gives error of "invalid regular expression: Unexpected internal error
escaped = inputDirectory.replaceAll("\\", "\\\\");
// This does not work
File file = new File (escaped);
Collection<File> files = FileUtils.listFiles(file, null, false);
// This works
File file2 = new File ("C:\\test");
Collection<File> files2 = FileUtils.listFiles(file2, null, false);
}
}
我尝试了replaceAll,但正如它在代码中所说的,它没有编译,并且返回了一个无效的正则表达式错误
我知道最好的做法是使用File.separator,但我真的不知道如何将其应用于命令行参数。用户可能会键入一个相对路径。用户引用的文件路径也可以位于任何驱动器上
如何避开反斜杠,以便使用FileUtils循环遍历每个文件
非常感谢您的帮助。更换您的替代品
escaped = inputDirectory.replaceAll("\\", "\\\\");
到
由于您是在程序中模拟参数,请考虑这一点
"-i C:\test"
实际上将是一个选项卡,即\t介于C:和est之间
正确的方法应该是:
"-i C:\\test"
更换替代者
escaped = inputDirectory.replaceAll("\\", "\\\\");
到
由于您是在程序中模拟参数,请考虑这一点
"-i C:\test"
实际上将是一个选项卡,即\t介于C:和est之间
正确的方法应该是:
"-i C:\\test"
但我真的不知道如何将其应用于命令行
争论
如果您的问题是如何传递命令行参数,您可以在windows命令提示符中使用java命令,如下所示
cmd> java Test C:\test1
或者如果您想在项目属性->运行下的netbeans中传递参数
然后在arguments字段中添加每个参数,如下所示
但我真的不知道如何将其应用于命令行
争论
如果您的问题是如何传递命令行参数,您可以在windows命令提示符中使用java命令,如下所示
cmd> java Test C:\test1
或者如果您想在项目属性->运行下的netbeans中传递参数
然后在arguments字段中添加每个参数,如下所示
仅供参考,向前斜杠/仅在Java中工作,例如new FileC:/dir/fooFYI向前斜杠/仅在Java中工作,例如new FileC:/dir/fooThank。这很有帮助。我的问题之一是我知道File.separator是最佳实践,因为它是独立于操作系统的。但我不知道如何将其应用于命令行参数,因为我无法控制用户的类型。或者,您可以简单地在windows和linux/中使用/而不是\ as。谢谢。这很有帮助。我的问题之一是我知道File.separator是最佳实践,因为它是独立于操作系统的。但我不知道如何将其应用于命令行参数,因为我无法控制用户的类型。或者,您可以简单地在windows和linux/中使用/而不是\ as。谢谢。是的,尽管我对字符串进行了转义,但在调试器中,值是C:\test,字符串值是C:emp。因此,FileUtils代码行正在中断,因为我猜它找不到与字符串值对应的目录。简而言之,replaceAll并没有避开反斜杠。我有什么选择?强制用户使用双反斜杠?在代码中用正斜杠替换反斜杠?更改字符串[]参数=新字符串[]{-IC:\test};to String[]arguments=新字符串[]{-ic:\\test};非常感谢。是的,尽管我对字符串进行了转义,但在调试器中,值是C:\test,字符串值是C:emp。因此,FileUtils代码行正在中断,因为我猜它找不到与字符串值对应的目录。简而言之,replaceAll并没有避开反斜杠。我有什么选择?强制用户使用双反斜杠?在代码中用正斜杠替换反斜杠?更改字符串[]参数=新字符串[]{-IC:\test};to String[]arguments=新字符串[]{-ic:\\test};