2013-04-25 34 views
2

尊敬所有的JLine用户,的JLine,如何获得完整的文件名在Windows

我最近开发,我使用的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

见https://www.student.cs.uwaterloo.ca/~cs132/Weekly/W03/FilePaths.html这使一个重要的注意事项'反斜线 - 就像在一个文件路径使用 - 不能直接在Java String中使用。 Java使用反斜杠来表示“下一个字符意味着特别的东西”。 Java中的反斜杠加倍表示“下一个字符(第二个反斜杠)应该插入到字符串中”.' – ecle 2013-04-25 05:00:29

+0

代码中没有错......只是用户需要输入文件名,其路径为“在Java字符串中测试\\ new \\ test.txt“,而不是让Java正确解释它。我想,这对用户来说很麻烦。如果是这样,您可以在打印出来之前将用户字符串输入中出现的任何“\”替换为“\\”。 – ecle 2013-04-25 05:08:04

+0

你不能直接从Java输入中获得\,因为正如你在前面的评论中提到的那样,\被解释为别的东西,例如, \ n,\ t。 – zyzyis 2013-04-26 08:01:28

回答

-1

JLine吃反斜杠,因为它们用于转义特殊字符,如!。您可以通过添加以下到您的ConsoleReader初始化禁用特殊字符(和反斜线的损失):

console.setExpandEvents(false); 

另外,如果你想保留的特殊字符,你需要加倍的反斜杠(所以不是foo\bar,输入foo\\bar)。

+0

我提到的反斜杠问题似乎已经在最新版本的JLine中解决了。在Windows中,它现在能够将反斜杠作为输入。 – zyzyis 2013-09-21 06:10:00

+0

@zyzyis我在2.9版本,所以我仍然得到这个问题。 – 2013-09-23 13:49:40

相关问题