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または、特殊文字を保持したい場合は、バックスラッシュを 2 倍にする必要があります (つまり、 , inputの代わりにfoo\\bar)。

于 2013-09-12T19:38:51.850 に答える