Заменить несколько строк в файле Java - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь заменить несколько строк в файле из источника как ArrayList.Но приложение стирает старую строку перед заменой новой.Пожалуйста, помогите.

public static void writeNewFile(File template, ArrayList<String> data) {

    File file = template;
    String nameToReplace = "((name))";
    String productToReplace = "((product))";
    String giftToReplace = "((gift))";
    String giftValueToReplace = "((gift-value))";

    String outputFileName = data.get(0);

    String workingDirectory = System.getProperty("user.dir");

    Scanner scanner = null;

    try {
        scanner = new Scanner(file);
        PrintWriter writer = new PrintWriter(workingDirectory + "\\Output\\" + outputFileName);

        while (scanner.hasNextLine()) {
            String line1 = scanner.nextLine();
            writer.println(line1.replace(nameToReplace, data.get(1)));
            writer.println(line1.replace(productToReplace, data.get(2)));
        }
    } catch (Exception e) {
        System.out.println("Destination folder not found");
    }

}

1 Ответ

0 голосов
/ 19 мая 2018

Это сработало для меня

try {                   
                BufferedReader reader = new BufferedReader(new FileReader(file));
                String line = "", oldtext = "";
                while ((line = reader.readLine()) != null) {
                    oldtext += line + "\r\n";
                }
                reader.close();

                String result = oldtext.replace(nameToReplace, data.get(1))
                        .replace(productToReplace, data.get(2))
                        .replace(giftToReplace, data.get(3));

                // Write updated record to a file
                FileWriter writer = new FileWriter(workingDirectory + "\\Output\\" + outputFileName);
                writer.write(result);                
                writer.close();                
            } catch (IOException ioe) {
                System.out.println("Write error");
            }       
...