亲爱所有JLine用户,
我最近正在开发一个控制台应用程序,我使用JLine来提供命令和文件名完成。
使用FileNameCompleter非常好但是我无法正确获取完整的文件名。
我的代码如下:
List<Completer> loadCompleter =
Arrays.asList(
new StringsCompleter(commands),
new FileNameCompleter(),
new NullCompleter()
);
console.addCompleter(new ArgumentCompleter(loadCompleter));
while ((line = console.readLine()) != null) {
line = line.trim();
// here I print out the line in char.
char[] result = line.toCharArray();
for (int i = 0; i < result.length; i ++) {
System.out.println(result[i] + " : " + (int)result[i]);
}
}
在我的代码的最后一部分,我打印出从控制台获得的行,例如,我收到了
myCommand test\new\test.txt
输出是myCommand testnewtest.txt
反斜杠由于某种原因消失了,我从来没有得到正确的文件路径。 当我在Unix系统中进行测试时,这不是问题,因为正斜杠似乎没问题。
任何人都可以帮助我获得完整文件名的正确方法吗?非常感谢。
的Si。
答案 0 :(得分:0)
现在对我有用,我是jline-2.11.jar。
答案 1 :(得分:-1)
JLine使用反斜杠,因为它们用于转义!
等特殊字符。您可以通过在ConsoleReader初始化中添加以下内容来禁用特殊字符(以及丢失反斜杠):
console.setExpandEvents(false);
或者,如果您确实想要保留特殊字符,则需要加倍反斜杠(因此,而不是foo\bar
,请输入foo\\bar
)。