2017-02-16 14 views
0

私は次のようにテキストを持つテキストファイルを持っていますEMVERSIONは1.32.5.0のようにテキストファイル内読書テキストファイル変数と更新された割り当てられた値は

emVersionemVersion = "1.32.5.0";

私はJavaコードを使用しなければならないすべてこのように更新されます。私が今まで行ってきたことは、行ごとにテキストファイルを読み込んで、破線を単語に見つけて1.32.4.0のトークンを置き換えたときに単語emVersionを検索することでしたが、スペースがファイル内で不等であるため動作しません。私が書いたものを

コードは次のとおりです。

パブリッククラスUpdateVariable {

public static void main(String s[]){ 
    String replace = "1.5.6"; 
String UIreplace = "\""+replace+"\""; 
    File file =new File("C:\\Users\\310256803\\Downloads\\setup.rul"); 
    Scanner in = null; 
    try { 
     in = new Scanner(file); 
     while(in.hasNext()) 
     { 
      String line=in.nextLine(); 
      if(line.contains("svEPDBVersion")) 
      { 
       String [] tokens = line.split("\\s+"); 
       String var_1 = tokens[0]; 
       String var_2 = tokens[1]; 
    String var_3 = tokens[2]; 
    String var_4 = tokens[3]; 
    String OldVersion = var_3; 
    String NewVersion = UIreplace; 
    try{ 
    String content = IOUtils.toString(new FileInputStream(file), StandardCharsets.UTF_8); 
    content = content.replaceAll(OldVersion, NewVersion); 
    IOUtils.write(content, new FileOutputStream(file), StandardCharsets.UTF_8); 
    } catch (IOException e) { 

    } 
      } 
     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

+1

コードを表示してください。 –

+1

「ファイル内のスペースが等しくない」とはどういう意味ですか?どの出力を期待し、何を得るのですか?そしてあなたの(間違った)出力を書き込むコードを少なくとも表示してください。 – IQV

答えて

0
//---this code changes each version's values but the is a option to keep the old value. 
    Scanner in = new Scanner(System.in); 

    File file = new File("versions.txt"); 

    ArrayList<String> data = new ArrayList<>(); 
    String[] arr = 
    { 
     "emVersion", "ecdbVersion", "releaseVersion" 
    }; 

    String line = ""; 
    String userInput = ""; 

    try (BufferedReader br = new BufferedReader(new FileReader(file));) 
    { 
     while ((line = br.readLine()) != null) 
     { 
      data.add(line); 
     } 

     for (int i = 0; i < arr.length; i++) 
     { 
      System.out.println("Please enter new " + arr[i] + " number or (s) to keep the old value."); 
      userInput = in.nextLine(); 

      line = data.get(i); 
      String version = line.substring(0, line.indexOf(" ")); 


      if (arr[i].equalsIgnoreCase(version)) 
      { 
       arr[i] = line.replace(line.subSequence(line.indexOf("= "), line.indexOf(";")), "= \"" + userInput + "\""); 
      } 

      if (userInput.equalsIgnoreCase("s")) 
      { 
       arr[i] = line; 
      } 

     } 

     PrintWriter printWriter = new PrintWriter(new FileWriter(file, false)); 
     printWriter.println(arr[0]); 
     printWriter.println(arr[1]); 
     printWriter.println(arr[2]); 
     printWriter.close(); 
    } 
    catch (Exception e) 
    { 
     System.out.println("Exception: " + e.getMessage()); 
    } 
+0

ecdbVersionとReleaseVersionの前にスペースがないときはうまく動作しますが、テキストファイルスペースにedbVersionより前に表示されているので、それは動作しません。@Lyle –

+0

それでは、空白を使わないでもかまいませんか? – Lyle

+0

テキストファイルは@Lyleだけ変更する必要があります。 –

0

使用正規表現の例: - 。line.trim()スプリット( "\ s * = \ s * "); 。それが動作しない場合は、私に知らせてください、私はあなたに完全な解決策を提供します。

関連する問題