如何在 Java 中转义命令行参数(文件路径)中的斜线?
How to escape slashes in command line argument (file path) in Java?
请注意,我是在 Windows 下使用 NetBeans 开发的。我也是运行JDK1.8.
该程序通过命令行接受一些参数。一个参数是文件路径。用户可能会键入 -i C:\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 但是,就像它在代码中所说的那样,它无法编译并且 returns 一个无效的正则表达式错误。
我知道最好的做法是使用 File.separator,但老实说,我不知道如何将它应用于命令行参数。也许用户可能会键入相对路径。用户引用的文件路径也可以在任何驱动器上。
如何转义反斜杠以便我可以使用 FileUtils 遍历每个文件?
非常感谢您的帮助。
更换你的替代品
escaped = inputDirectory.replaceAll("\", "\\");
至
escaped = inputDirectory.replaceAll(Pattern.quote("\"), Matcher.quoteReplacement("\\"));
由于您在程序中模仿参数,请考虑
"-i C:\test"
实际上是 tab
(即 \t),介于 C:
和 est
之间
正确的方法应该是:
"-i C:\test"
but I honestly have no clue how I can apply it to a command line
argument.
如果您的问题是如何传递命令行参数,您可以在 windows 命令提示符中使用 java 命令,如下所示。
cmd> java Test C:\test1
或者如果你想在项目属性下的 netbeans 中传递参数 -> 运行
然后在参数字段中添加每个参数,如下所示。
请注意,我是在 Windows 下使用 NetBeans 开发的。我也是运行JDK1.8.
该程序通过命令行接受一些参数。一个参数是文件路径。用户可能会键入 -i C:\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 但是,就像它在代码中所说的那样,它无法编译并且 returns 一个无效的正则表达式错误。
我知道最好的做法是使用 File.separator,但老实说,我不知道如何将它应用于命令行参数。也许用户可能会键入相对路径。用户引用的文件路径也可以在任何驱动器上。
如何转义反斜杠以便我可以使用 FileUtils 遍历每个文件?
非常感谢您的帮助。
更换你的替代品
escaped = inputDirectory.replaceAll("\", "\\");
至
escaped = inputDirectory.replaceAll(Pattern.quote("\"), Matcher.quoteReplacement("\\"));
由于您在程序中模仿参数,请考虑
"-i C:\test"
实际上是 tab
(即 \t),介于 C:
和 est
正确的方法应该是:
"-i C:\test"
but I honestly have no clue how I can apply it to a command line argument.
如果您的问题是如何传递命令行参数,您可以在 windows 命令提示符中使用 java 命令,如下所示。
cmd> java Test C:\test1
或者如果你想在项目属性下的 netbeans 中传递参数 -> 运行 然后在参数字段中添加每个参数,如下所示。