JLine,如何在Windows中获取完整的文件名

时间:2013-04-25 04:12:18

标签: java parsing console terminal jline

亲爱所有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。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:-1)

JLine使用反斜杠,因为它们用于转义!等特殊字符。您可以通过在ConsoleReader初始化中添加以下内容来禁用特殊字符(以及丢失反斜杠):

console.setExpandEvents(false);

或者,如果您确实想要保留特殊字符,则需要加倍反斜杠(因此,而不是foo\bar,请输入foo\\bar)。