2013-04-25 96 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

相關問題