JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Что не так ?
Aleksandr
22 уровень
  • 26.05.2018
  • 603просмотров
  • 1комментарий

Что не так ?

Вопрос по задаче Прайсы 2
Java Core,  8 уровень,  11 лекция
Обсуждается

CRUD для таблицы внутри файла.
Напиши программу, которая считывает с консоли путь к файлу для операций CRUD и при запуске в зависимости от флага, переданного в параметрах обновляет данные товара с заданным id или производит физическое удаление товара с заданным id (удаляет из файла все данные, которые относятся к переданному id).
-u id productName price quantity
-d id

Значения параметров:
-u - флаг, который означает обновление данных товара с заданным id
-d - флаг, который означает физическое удаление товара с заданным id (из файла удаляются все данные, которые относятся к переданному id)
id - id товара, 8 символов
productName - название товара, 30 символов
price - цена, 8 символов
quantity - количество, 4 символа

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity

Данные дополнены пробелами до их длины.

Для чтения и записи файла нужно использовать FileReader и FileWriter соответственно.

Пример содержимого файла:
19847   Шорты пляжные синие           159.00  12
198479  Шорты пляжные черные с рисунко173.00  17
19847983Куртка для сноубордистов, разм10173.991234

Требования:
  • Программа должна считать имя файла для операций CRUD с консоли.
  • При запуске программы без параметров список товаров должен остаться неизменным.
  • При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.
  • При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла.
  • Созданные для файлов потоки должны быть закрыты.
....
package com.javarush.task.task18.task1828; /* Прайсы 2 */ import java.io.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String nameFile; nameFile = br.readLine(); switch (args[0]){ case "-d": delete(nameFile, args[1]); break; case "-u": update(nameFile, args[1], args[2], args[3], args[4]); break; } } private static void update(String nameFile, String id, String productName, String price, String quantity) throws IOException { Pattern p = Pattern.compile("^\\d+"); File upFile = new File (nameFile); BufferedReader brf = new BufferedReader(new FileReader(upFile)); File copyFile = new File(upFile.getParent(),"copy.txt"); BufferedWriter brOut = new BufferedWriter(new FileWriter(copyFile, true)); String line; while((line=brf.readLine())!=null){ Matcher m = p.matcher(line); if(m.find()){ String iD = line.substring(0,m.end()); if (!iD.equals(id)){ brOut.write(line); brOut.newLine(); } else { StringBuilder strB = new StringBuilder(); String nameID = String.format("%-8s", id); strB.append(nameID); String nameProduct = String.format("%-30s", productName); strB.append(nameProduct); String namePrice = String.format("%-8s", price); strB.append(namePrice); String nameQuantity = String.format("%-4s", quantity); strB.append(nameQuantity); brOut.write(strB.toString()); brOut.newLine(); } } } brf.close(); brOut.close(); upFile.delete(); copyFile.renameTo(upFile); } private static void delete(String nameFile, String id) throws IOException { Pattern p = Pattern.compile("^\\d+"); File upFile = new File (nameFile); BufferedReader brf = new BufferedReader(new FileReader(upFile)); File copyFile = new File(upFile.getParent(),"copy.txt"); BufferedWriter brOut = new BufferedWriter(new FileWriter( copyFile, true)); String line ; while((line=brf.readLine())!=null){ Matcher m = p.matcher(line); if(m.find()) { String iD = line.substring(0, m.end()); if (!iD.equals(id)) { brOut.write(line); brOut.newLine(); } } } brf.close(); brOut.close(); upFile.delete(); copyFile.renameTo(upFile); } }
0
Комментарии (1)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #374105
Уровень 29
29 ноября 2018, 23:13
Ещё один заброшенный вопрос ...
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush