Привет,
Я уже наверное всех задолбал вопросами по этой задаче, но очень хочу наконец то ее одолеть.
Уже все работает как надо, записи обновляются, удаляются и вроде бы всюду позакрывал все потоки(несмотря на то что большинство из них лежат в трай кэтч блоках), но валидатор упорно не принимает решения...
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
try {
String file = consoleReader.readLine();
if (!(args.length == 0)) {
if (args[0].equals("-u")) {
updateList(args, file);
}
if (args[0].equals("-d")) {
deleteRecord(args, file);
}
}
} catch (Exception e) {
}
consoleReader.close();
}
//C:\Users\vla9d\Desktop\Test\t1.txt
public static void updateList(String[] args, String file) {
ArrayList<String> tempbuffer = new ArrayList<>();
String updatedRecord = updateLine(args);
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while (br.ready()) {
tempbuffer.add(br.readLine());
}
br.close();
} catch (Exception e) {
}
for (String s : tempbuffer) {
Integer oldIndex = Integer.parseInt(s.substring(0, 8).trim());
Integer newIndex = Integer.parseInt(args[1].trim());
if (oldIndex.equals(newIndex)) {
tempbuffer.set(tempbuffer.indexOf(s), updatedRecord);
}
}
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
PrintWriter pw = new PrintWriter(bw);
int counter = 0;
for (String s : tempbuffer) {
pw.print(s);
counter++;
if(counter<tempbuffer.size()){
pw.print("\n");
}
}
bw.close();
pw.close();
} catch (Exception e) {
}
}
public static void deleteRecord(String[] args, String file) {
ArrayList<String> tempbuffer = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while (br.ready()) {
tempbuffer.add(br.readLine());
}
br.close();
} catch (Exception e) {
}
int lineToDelete = -1;
for (String s : tempbuffer) {
Integer oldIndex = Integer.parseInt(s.substring(0, 8).trim());
Integer newIndex = Integer.parseInt(args[1].trim());
if (oldIndex.equals(newIndex)) {
lineToDelete = tempbuffer.indexOf(s);
}
}
tempbuffer.remove(lineToDelete);
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
PrintWriter pw = new PrintWriter(bw);
int counter = 0;
for (String ss : tempbuffer) {
pw.print(ss);
counter++;
if(counter<tempbuffer.size()){
pw.print("\n");
}
}
bw.close();
pw.close();
} catch (Exception e) {
}
}
public static String updateLine(String[] args) {
StringBuilder sb = new StringBuilder();
String id = updateRecord(args[1], 8);
String productName = updateRecord(args[2], 30);
//changes to price formating
Float rawPrice = Float.parseFloat(updateRecord(args[3], 8));
String stPrice = String.format(Locale.US, "%.2f", rawPrice);
String price = updateRecord(stPrice, 8);
String quantity = updateRecord(args[4], 4);
sb.append(id);
sb.append(productName);
sb.append(price);
sb.append(quantity);
return sb.toString();
}
public static String updateRecord(String line, int length) {
StringBuilder sb = new StringBuilder();
String result;
if (line.length() > length) {
result = line.substring(0, length);
} else {
sb.append(line);
while (sb.length() < length) {
sb.append(" ");
}
result = sb.toString();
}
return result;
}
}
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
try {
String file = consoleReader.readLine();
if (!(args.length == 0)) {
if (args[0].equals("-u")) {
updateList(args, file);
}
if(args[0].equals("-d")){
deleteRecord(args, file);
}
}
} catch (Exception e) { }
consoleReader.close();
}
//C:\Users\vla9d\Desktop\Test\t1.txt
public static void updateList(String[] args, String file) {
ArrayList<String> tempbuffer = new ArrayList<>();
String updatedRecord = updateLine(args);
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while (br.ready()) {
tempbuffer.add(br.readLine());
}
br.close();
} catch (Exception e) {
}
for (String s : tempbuffer) {
Integer oldIndex = Integer.parseInt(s.substring(0, 8).trim());
Integer newIndex = Integer.parseInt(args[1].trim());
if (oldIndex.equals(newIndex)) {
tempbuffer.set(tempbuffer.indexOf(s), updatedRecord);
}
}
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
PrintWriter pw = new PrintWriter(bw);
for (String s : tempbuffer) {
pw.println(s);
}
bw.close();
pw.close();
} catch (Exception e) {
}
}
public static void deleteRecord(String[] args, String file){
ArrayList<String> tempbuffer = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while (br.ready()) {
tempbuffer.add(br.readLine());
}
br.close();
} catch (Exception e) {
}
for (String s : tempbuffer) {
Integer oldIndex = Integer.parseInt(s.substring(0, 8).trim());
Integer newIndex = Integer.parseInt(args[1].trim());
if (oldIndex.equals(newIndex)) {
tempbuffer.remove(s);
}
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
PrintWriter pw = new PrintWriter(bw);
for (String ss : tempbuffer) {
pw.println(ss);
}
bw.close();
pw.close();
} catch (Exception e) { }
}
}
public static String updateLine(String[] args) {
StringBuilder sb = new StringBuilder();
String id = updateRecord(args[1], 8);
String productName = updateRecord(args[2], 30);
String price = updateRecord(args[3], 8);
String quantity = updateRecord(args[4], 4);
sb.append(id);
sb.append(productName);
sb.append(price);
sb.append(quantity);
return sb.toString();
}
public static String updateRecord(String line, int length) {
StringBuilder sb = new StringBuilder();
String result;
if (line.length() > length) {
result = line.substring(0, length);
} else {
sb.append(line);
while (sb.length() < length) {
sb.append(" ");
}
result = sb.toString();
}
return result;
}
}