2017-06-28 23 views
1

我正在製作一個程序,它涉及編輯文件並用路徑替換佔位符。getPath()不返回斜線? (Windows)

下面是代碼:

List<String> lines = Files.readAllLines(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath()); 
     int index = -1; 
     for (String s : lines){ 
      index++; 
      if (s.contains("PROGRAM/GAMEDIRPATH")) break; 
     } 

     String k = lines.get(index); 
     k = k.replaceAll("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath()); 
     lines.set(index, k); 
     clearFile(new File(new File(basepath, "Game"), "launcher_profiles.json")); 
     Files.write(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath(), lines, StandardOpenOption.CREATE); 

沒有與基本路徑沒有問題,「遊戲」文件的路徑,因爲在我的程序中所有其他的地方,它包括斜線。它只是在這部分代替不包括斜線的佔位符。

例如,C:/ Users \ name \ Documents \ program \ Game不是 ,而是返回UsersnameDocumentsprogramGame。

如前所述,在所有其他地方,它會返回正確的路徑名(帶有斜槓)。 在Mac上,即使在這部分中,所有斜槓都在那裏。

有誰知道一個修復?謝謝。

+0

我想你想'k.replaceAll(「PROGRAM」+ File.separator +「GAMEDIRPATH」'加上顯示你的輸入,並澄清你的問題,如果不解決 –

回答

4

String.replaceAll方法的文檔:

注意反斜槓(\)和美元符號($)替換字符串中的可能導致的結果是不同的比如果它被視爲文字替換字符串;請參閱Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement來抑制這些字符的特殊含義。

+0

謝謝!這是非常有用的知道和它的作品。 – Blockhead7360

1

您已經使用replaceAll方法來替換其他字符串的一部分。我認爲replaceAll方法的第一個參數採用字符串,但它被視爲正則表達式,我認爲參數「PROGRAM/GAMEDIRPATH」中的斜槓會觸發某些內容。

只是刪除replaceAll方法並使用replace方法,因爲replace()方法將characterSequence作爲參數。這不是替換所有字符串的解決方案,但至少您會知道原因。

k = k.replace("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath()); 

編輯:您的代碼可以在Linux很好,它顯示爲 /家/用戶名/文檔/遊戲k的值

在Windows上,你可能可以通過使用正則表達式時,搜索轉義字符

相關問題