如何在Java中转义命令行参数(文件路径)中的斜杠?

如何在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

请注意,我是在Windows下使用NetBeans开发的。我还运行JDK1.8

程序通过命令行接受一些参数。一个参数是文件路径。用户可能会键入-ic:\test。我怎样才能逃过刀口?似乎什么都不对劲

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