Как использовать условный оператор или содержит метод в текстовом файле? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть Java-программа, которая может читать несколько файлов и заменять значения соответственно.Однако я изо всех сил пытаюсь применить к нему условие и применить изменения только при соблюдении определенного условия.Например, если файл содержит этот конкретный символ «: 20:», примените изменения, в противном случае оставьте текстовый файл без изменений.Проблема здесь в том, что у меня нет полей для поиска соответствующего условия, поэтому я не знаю, как их можно применить к такому текстовому файлу, который содержит только такие данные, как: (12345555555) 233344 100: 20: aaa.

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

public class TextFm 
{
    public static void main(String[] args)
    {
        File folder = new File("C:\\tmp");
        File[] listOfFiles = folder.listFiles();
        for(File file : listOfFiles) 
        {
            replaceText(file);
        }
    }

    public static void replaceText(File file) 
    {

        try 
        {
            BufferedReader reader = new BufferedReader(new FileReader(file));

            String line = "", oldtext = "";
            while ((line = reader.readLine()) != null) 
            {

                oldtext = oldtext + line + System.lineSeparator();
            }
            reader.close();


            String replacedtext = oldtext.replaceAll("100", "200");


            FileWriter writer = new FileWriter(file);
            writer.write(replacedtext);

            writer.close();

            System.out.println("Done");

        } catch (IOException ioe) 

        {
            ioe.printStackTrace();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018
    public static void replaceText(File file) 
    {
        try 
        {
            Charset charset = Charsets.defaulCharset();
            String oldText = new String(Files.readAllBytes(file.toPath()),
                                        charset);

            if (!oldText.contains(":20")) {
                return;
            }
            if (!oldText.matches("(?s).*you (idiot|unspeakable).*")) {
                return;
            }
            String replacedtext = oldtext.replace("100", "200");
            replacedtext = replacedtext .replaceAll("\\d", "X"); // Digit X-ed out

            if (!replacedText.equals(oldText)) {
                Files.write(file.toPath(), replacedText.getBytes(charset));
            }
            System.out.println("Done");
        } catch (IOException ioe) 
        {
            ioe.printStackTrace();
        }
    }

Для скорости не следует собирать содержимое файла с помощью строки и +.Лучше использовать StringBuilder, либо очень хороший класс Files.

Поиск текста происходит либо по содержанию, либо по совпадению регулярного выражения.Замена также может быть выполнена любым из них.

Методы replace, replaceFirst и replaceAll возвращают исходную строку, когда ничего не может быть заменено.

Regex (?s) позволяет . (= любой символ) также соответствует разрывам строк.

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

Использование метода contains() в этом случае будет работать нормально.Вы можете сделать это так:

String line = "", oldtext = "";
while ((line = reader.readLine()) != null) 
{

   oldtext = oldtext + line + System.lineSeparator();
}
reader.close();

if(oldtext.contains(":20:")) {
    String replacedtext = oldtext.replaceAll("100", "200");

    FileWriter writer = new FileWriter(file);
    writer.write(replacedtext);

    writer.close();

    System.out.println("Done");
}
...