Java - загрузить файл, заменить строку, сохранить - PullRequest
1 голос
/ 07 ноября 2011

У меня есть программа, которая загружает строки из пользовательского файла, а затем выбирает последнюю часть строки (которая будет целым числом)

Вот стиль, в котором он сохранен:

nameOfValue = 0
nameOfValue2 = 0

и так далее. Я точно выбрал значение - отладил его распечатав. Я просто не могу сохранить это обратно.

if(nameOfValue.equals(type)) {
        System.out.println(nameOfValue+" equals "+type);
            value.replace(value, Integer.toString(Integer.parseInt(value)+1));
        }

Как бы я это восстановил? Я пробовал bufferedwriter, но он просто стирает все в файле.

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

Я предлагаю сохранить все содержимое исходного файла (либо в памяти, либо во временном файле; я сделаю это в памяти), а затем запишите его снова, включая изменения.Я считаю, что это будет работать:

public static void replaceSelected(File file, String type) throws IOException {

    // we need to store all the lines
    List<String> lines = new ArrayList<String>();

    // first, read the file and store the changes
    BufferedReader in = new BufferedReader(new FileReader(file));
    String line = in.readLine();
    while (line != null) {
        if (line.startsWith(type)) {
            String sValue = line.substring(line.indexOf('=')+1).trim();
            int nValue = Integer.parseInt(sValue);
            line = type + " = " + (nValue+1);
        }
        lines.add(line);
        line = in.readLine();
    }
    in.close();

    // now, write the file again with the changes
    PrintWriter out = new PrintWriter(file);
    for (String l : lines)
        out.println(l);
    out.close();

}

И вы бы вызвали метод, подобный этому, предоставив файл, который вы хотите изменить, и имя значения, которое вы хотите выбрать:

replaceSelected(new File("test.txt"), "nameOfValue2");
1 голос
/ 07 ноября 2011

Я думаю, что наиболее удобный способ:

  1. Читать текстовый файл построчно, используя BufferedReader
  2. Для каждой строки найдите часть int с использованием регулярного выражения и замените это с вашим новым значением.
  3. Создать новый файл с вновь созданными текстовыми строками.
  4. Удалить исходный файл и переименовать новый созданный файл.

Пожалуйста, дайте мне знать, если вам нужна программа на Java, реализованная вышеупомянутым алгоритмом.

0 голосов
/ 07 ноября 2011

Трудно ответить без полного кода ...

Является ли значение строкой?Если это так, замена создаст новую строку, но вы нигде не сохраняете эту строку.Помните, что строки в Java являются неизменяемыми.

Вы говорите, что используете BufferedWriter, вы очищали и закрывали его?Это часто является причиной таинственного исчезновения ценностей, когда они должны быть там.Именно поэтому у Java есть ключевое слово finally.

Также сложно ответить без подробностей о вашей проблеме, что именно вы пытаетесь достичь?Могут быть более простые способы сделать это, которые уже есть.

...