package com.javarush.task.task18.task1828; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /* Прайсы 2 */ public class Solution { static List<String> fileContent; public static void main(String[] args) throws Exception { if (!isCorrectArguments(args)) return; fileContent = new ArrayList<>(); String filename = getFileName(); readFromFile(filename); System.out.println("initial file"); printFileContent(); switch (args[0]) { case "-u" : updateLine(args); break; case "-d" : deleteLine(args[1]); break; } System.out.println("final file"); printFileContent(); writeToFile(filename); } public static boolean isCorrectArguments(String[] args) { return args.length > 0 && (args[0].equals("-u") || args[0].equals("-d")); } public static String getFileName() throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String filename = reader.readLine(); //String filename = "d:/tmp/price.txt"; reader.close(); return filename; } public static void readFromFile(String filename) throws FileNotFoundException, IOException { BufferedReader reader = new BufferedReader(new FileReader(filename)); String lineOfFile = ""; while ( (lineOfFile = reader.readLine()) != null) { fileContent.add(lineOfFile); } reader.close(); } public static void clearFile(String filename) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(filename)); writer.write(""); writer.close(); } public static void writeToFile(String filename) throws IOException { if (fileContent.size() > 0) { clearFile(filename); BufferedWriter writer = new BufferedWriter(new FileWriter(filename, true)); for (int i = 0; i < fileContent.size(); i++) { writer.write(fileContent.get(i)); if ( i < fileContent.size()-1 ) writer.newLine(); } writer.close(); } } public static void printFileContent() { fileContent.forEach( value -> System.out.println("row= " + value)); } private static void updateLine(String[] newLine) // поступит args { String line = formString(newLine); int index = getIndex(newLine[1]); fileContent.set(index, line); } public static void deleteLine(String lineId) // поступит args[1] { int index = getIndex(lineId); fileContent.remove(index); } public static int getIndex(String lineId) { int index = 0; String id = lineId.length() > 8 ? lineId.substring(0, 8) : lineId; while(lineId.length() < 8) lineId += " "; for (int i = 0; i < fileContent.size(); i++) { if (fileContent.get(i).startsWith(id) ) { index = i; break; } } return index; } public static String formString(String[] table) { String id = getString(table[1], 8); String productId = ""; for (int i = 2; i < table.length-2; i++) { productId += table[i] + " "; } productId = getString(productId, 30); String price = getString(table[table.length-2], 8); String quantity = getString(table[table.length-1], 4); return id + productId + price + quantity; } public static String getString(String data, int length) { String result = data.length() > length ? data.substring(0, length) : data; while (result.length() < length) result += " "; return result; } }