Программа, которая читает и записывает в файл txt / log

Я новичок в программировании и у меня есть базовые знания.

Я пытаюсь сделать программу, которая:

  1. Читает путь к уже существующему файлу
  2. Читает строку, которую я хочу извлечь из существующего файла.
  3. Читает путь для создания нового файла.
  4. Создает файл с указанным путем из точки 3., который содержит выбранные слова из точки 2.

Например, если у меня есть файл журнала / txt. Из него я хочу извлечь все строки, которые я читаю с клавиатуры в пункте 2.

После этого я хочу, чтобы все эти строки были записаны в новый файл журнала / txt.

Надеюсь, вы поняли, что я пытаюсь сделать.

Это то, что я писал до сих пор, но я как бы застрял в идеях, и, поскольку я все еще изучаю синтаксис кодирования, довольно сложно это понять.

package com.kwextractor;
import java.io.*;
import java.util.Scanner;


public class Main {
    public static String inputFilePath;
    public static String outputFilePath;
    public static String textToGet;


        public static void main(String[] args) throws IOException {
        Scanner filePathIn = new Scanner(System.in);
        Scanner inputText = new Scanner(System.in);
        Scanner filePathOut = new Scanner(System.in);

        System.out.println("Enter file path:");
        inputFilePath = filePathIn.nextLine();

        System.out.println("Enter the string you want to extract:");
        textToGet = inputText.nextLine();

        System.out.println("Enter the path of the exported file:");
        outputFilePath = filePathOut.nextLine();

        File inputFile = new File(inputFilePath +".txt");

        BufferedReader inputReader = new BufferedReader(new FileReader(inputFile));
        String nextLine;
        while ((nextLine = inputReader.readLine()) != null)
        {
            if (nextLine.equals(textToGet)) {

                BufferedWriter writer = null;
                try {
                    File outputFile = new File(outputFilePath+".txt");
                    System.out.println(outputFile.getCanonicalPath());
                    writer = new BufferedWriter(new FileWriter(outputFile));
                    writer.write(textToGet);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        // Close the writer regardless of what happens...
                        writer.close();
                    } catch (Exception e) {
                    }
                }
            }
        }
    }
}

Если вы когда-нибудь застреваете в идеях, то последний, который вы хотите сделать, представляет нам неполный вопрос. Найдите время, чтобы вернуться к доске и конкретно наметить, чего вы хотите достичь с помощью своей программы. Тогда работайте в сторону выполнение это. Если вы застряли в какой-то конкретной части этого вопроса, вернитесь и спросите нас. Тогда вы будете лучше подготовлены для этого.

Makoto 15.03.2018 23:26

для образовательных целей этот код - уже тяжелая работа ... попробуйте - действительно - понять код, например Обработка исключений сама по себе уже является важным делом, поскольку существует много кода без достаточной обработки исключений ... в большинстве случаев это выглядит как `catch (Exception e) {e.printStackTrace (); } `или даже лучше //TODO, также потоки, буферы и даже то, что нет причин делать переменную общедоступной, как и в вашем коде нет причин делать ее статической. (Я надеюсь, что это достаточно "идей", которые вы можете придумать, чтобы научиться программировать)

gkhaos 15.03.2018 23:39

@makoto Я не вижу здесь неполных вопросов. Я точно объяснил, что хочу создать, а также поместил код в надежде, что кто-то попытается объяснить мне, что я сделал не так, потому что, конечно, программа не запущена и, возможно, кто-то сможет меня исправить.

Chereji Gheorghe 15.03.2018 23:39

Да, именно тот факт, что вы хотите, чтобы мы объяснили, как вы можете создать свое приложение, делает ваш вопрос «неполным» в лучшем случае. Вы не можете просто ожидать, что мы сделаем это здесь. Мы можем помочь вам с деталями, но вы должны приложить усилия. Я настоятельно рекомендую вам выполнить то, что я предложил выше.

Makoto 15.03.2018 23:40

@moneydhaze Я получу все эти советы и попробую применить их. Благодарность

Chereji Gheorghe 15.03.2018 23:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
59
2

Ответы 2

  1. Выполните 4 небольших проекта, каждый из которых выполняет один из перечисленных вами шагов.
  2. Повторно выполните этот проект, используя жестко запрограммированные пути вместо ввода с консоли, чтобы избежать некоторых сложностей.
  3. Как только сработает №2, я бы добавил ввод в консоль, но добавил бы проверки ввода с использованием StringUtils.isBlank для обработки ошибочного ввода.

Короче говоря, вы пытаетесь сделать слишком много вещей одновременно. Программирование может быть очень похоже на математическое уравнение, вам нужно только одно неизвестное за раз.

Это отличная идея. Сначала я подумал о создании разных классов, которые потом буду вызывать в основной функции. Но я попробую то, что вы сказали, спасибо!

Chereji Gheorghe 15.03.2018 23:56

Итак, ребята ... Я попытался переработать программу и поискать больше о том, как я могу выполнить то, что я хочу сделать, где я застрял в той части, где мне нужно создать файл и написать в него. Буду признателен, если кто-нибудь скажет мне, что я сделал не так в той части, где мне нужно записать в новый файл. Вот код, который я переделал:

    package com.readtxtfile;
import java.io.*;
import java.util.Scanner;

public class Main {
    private static String inputFilePath;
    private static String  textToGet;
    private static void readInputFile()
    {
        String line1 = null;

        Scanner input1 = new Scanner(System.in);
        System.out.println("Insert the input file path:");
        inputFilePath = input1.nextLine();


        try {
            FileReader readInput = new FileReader(inputFilePath+".txt");
            BufferedReader bufferedInput = new BufferedReader(readInput);
            line1 = bufferedInput.readLine();
            if (line1 != null)
                System.out.println("FILE LOADED SUCCESFULLY");

            bufferedInput.close();

        } catch (FileNotFoundException ex) {
            System.out.println(
                    "Unable to open file '" + inputFilePath + "'");
        } catch (IOException ex) {
            System.out.println(
                    "Error reading file '" + inputFilePath + "'");
        }
    }
    private static void textSearch()
    {
        Scanner input2 = new Scanner(System.in);
        System.out.println("Insert the text you want to extract:");
        textToGet = input2.nextLine();
    }
    private static void writeOutputFile()
    {

        Scanner input3 = new Scanner(System.in);
        System.out.println("Insert the output file path:");
        String outputFilePath = input3.nextLine();
            Scanner input4 = new Scanner(inputFilePath);

            int lineNumber = 0;
            while (input4.hasNextLine()) {
                String line2 = input4.nextLine();
                lineNumber++;
                if (textToGet.equals(line2))
                {
                    File output_file = new File(outputFilePath +".txt");
                    FileWriter writeOutput = null;
                    BufferedWriter bufferedInput = new BufferedWriter(writeOutput);
                    try {
                        writeOutput = new FileWriter(output_file +".txt");
                        writeOutput.write(line2);
                    } catch (IOException e)
                    {
                        e.printStackTrace();
                    }

                }
                }
            }
    public static void main(String[] args)
    {
     readInputFile();
     textSearch();
     writeOutputFile();
    }
}

Другие вопросы по теме