2017-10-12 71 views
0

我想替換某些行:閱讀文件,並用新的

  • 讀文件,
  • 查找某些詞
  • 開始的行替換該行以一個新的

請問有沒有一種使用Java 8 Stream的高效方法?

+0

你嘗試過這麼遠嗎?如果可能的話,請添加一些代碼並解釋你在哪裏受困 – MiBrock

回答

0

你可以試試這個示例程序。我讀取一個文件並尋找一個模式,如果我找到一個模式,我用新的模式替換那一行。

在這個類: - 在方法getChangedString,我讀每一行(的資源文件的路徑爲您讀取文件) - 使用地圖我檢查每一行 - 如果我找到匹配的行,我更換 - 否則我離開現有生產線,因爲它是 - 最後返回它作爲一個List

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.List; 
import java.util.stream.Collectors; 

public class FileWrite { 

    private static String sourceFile = "c://temp//data.js"; 
    private static String replaceString = "newOrders: [{pv: 7400},{pv: 1398},{pv: 1800},{pv: 3908},{pv: 4800},{pv: 3490},{pv: 4300}"; 

    public static void main(String[] args) throws IOException { 
     Files.write(Paths.get(sourceFile), getChangedString()); 
    } 

    /* 
    * Goal of this method is to read each file in the js file 
    * if it finds a line which starts with newOrders 
    * then it will replace that line with our value 
    * else 
    * returns the same line 
    */ 
    private static List<String> getChangedString() throws IOException { 
     return Files.lines(Paths.get(sourceFile)) //Get each line from source file 
       //in this .map for each line check if it starts with new orders. if it does then replace that with our String 
       .map(line -> {if(line.startsWith("newOrders:")){ 
        return replaceString; 
       } else { 
        return line; 
       } 
         }) 

       //peek to print values in console. This can be removed after testing 
       .peek(System.out::println) 
       //finally put everything in a collection and send it back 
       .collect(Collectors.toList()); 



    } 
} 
+0

謝謝。那很完美。正是我在找什麼 –