2

亲爱的所有 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 系统中进行测试时,这不是问题,因为正斜杠似乎没问题。

谁能帮助我获取完整文件名的正确方法?非常感谢。

矽。

4

2 回答 2

-1

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

console.setExpandEvents(false);

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

于 2013-09-12T19:38:51.850 回答
-1

它现在对我有用,我是 jline-2.11.jar。

https://github.com/Qatar-Computing-Research-Institute/NADEEF/blob/master/console/src/qa/qcri/nadeef/console/Console.java

于 2015-09-04T10:19:01.757 回答