Как читать и изменять текстовый файл на основе некоторых условий - PullRequest
1 голос
/ 10 ноября 2010

Как я могу прочитать существующий текстовый файл и изменить некоторые его значения на основе какого-либо условия, например, если я получу какой-нибудь текст, например

Apple 1 3 5

Теперь, когда я получаю целочисленное значение, мне нужно увеличить его счет на 1 и снова сохранить в тот же файл.

Например, если я читаю некоторый контент, как указано выше, я смогу сохранить

Apple, 2 4 6

снова к тому же файлу

Мой код выглядит как

попытка { FileWriter fstream = new FileWriter ("c: \ Apple.txt", true);

        FileReader inputFileReader   = new FileReader("c:\\Apple.txt");
        BufferedReader inputStream   = new BufferedReader(inputFileReader);
        PrintWriter    outputStream  = new PrintWriter(fstream);



        while((inline=inputStream.readLine())!=null)
        {
            values=inline.split("-");

            Integer l = Integer.parseInt(values[2])+1;
            outputStream.print((inline.replaceAll(values[2],l.toString())));

        }

        outputStream.close();


    }

Итак, я получаю вывод вроде

яблоко 1 3 5 яблоко 1 4 5

Но мой требуемый вывод

яблоко 1 4 5

Спасибо за продвижение

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Разделите ваш код на отдельные вызовы методов:

File f = getFile();
String text = getFileContents(f);
if(matchesRequirements(text)){
    String newText = performReplacements(text);
    writeFile(newText, f);
}

Теперь вы можете реализовать следующие методы:

private static void writeFile(String newText, File f){
    // TODO implement this method
}

private static String performReplacements(String text){
    // TODO implement this method
    return null;
}

private static boolean matchesRequirements(String text){
    // TODO implement this method
    return false;
}

private static String getFileContents(File f){
    // TODO implement this method
    return null;
}

private static File getFile(){
    // TODO implement this method
    return null;
}

Посмотрите, как далеко вы продвинулись, и задайте конкретные вопросы, где у вас есть проблемы.

0 голосов
/ 11 ноября 2010

Я использовал RandomAccessFile, и он отлично работает.

0 голосов
/ 10 ноября 2010

Вы не можете сделать это в интерактивном режиме для одного и того же файла (или, по крайней мере, возможно, вы можете, но это было бы очень сложно) .. вы могли бы

  • открыть входной файл
  • откройте выходной файл
  • для каждой строки в файле
    • проверьте ваше состояние, если true
      • сгенерируйте новую строку в соответствии с тем, что вы собираетесь изменить
      • сохранить его в выходном файле
    • если false
      • скопировать строку в новый файл без изменения
  • закрыть оба файла
  • удалить первый и переименовать второй в первый (это легко сделать с помощью функций API)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...