Бомбит, 4 дня решаю эту задачу, всё работает, добавляет корректно, инкриминирует корректно, но если наименование товара пишу на русском, в файл добавляется абракадабра.
на аргумент "Куртка для сноубордистов, разм" 10173.99" 1234 добавляется в строку это чудо: C@B:0 4;O A=>C1>@48AB>2, @07<10173.991234
На английском языке полный порядок. Судя по комментам ни кто с этим не сталкивался. Что я желаю не так? пАмАгите!!!!
package com.javarush.task.task18.task1827;
/*
Прайсы
*/
import java.io.*;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
if ((args.length == 4) && args[0].equals("-c")) {
AddProduct(args);
}
}
public static int Max (ArrayList<Integer> arrMax) {
int max = arrMax.get(0);
for (int i = 1; i < arrMax.size(); i++) {
if (arrMax.get(i) > max) {
max = arrMax.get(i);
}
}
return max;
}
public static void AddProduct(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
int productName = 1;
int price = 2;
int quantity = 3;
int idLength = 8;
int productNameLength = 30;
int priceLength = 8;
int quantityLength = 4;
ArrayList<Character> arr = new ArrayList<>();
FileInputStream fis = new FileInputStream(fileName);
ArrayList<Integer> arrInt = new ArrayList<>();
StringBuilder idString = new StringBuilder();
String c = null;
if (fis.available() > 0) {
while (fis.available() > 0) {
arr.add((char)fis.read());
}
fis.close();
int sizeOfBigString = idLength + productNameLength + priceLength + quantityLength + 1;
int mulStr = arr.size() / sizeOfBigString;
int sizeOfStringNoId = productNameLength + priceLength + quantityLength + 1;
for (int i = 1; i <= mulStr; i++) {
for (int j = arr.size() - (sizeOfBigString*i) + 1; j < arr.size() - (sizeOfBigString*i) + 9; j++) {
idString.append((char)arr.get(j));
}
String b = idString.toString();
idString.setLength(0);
for (int k = 0; k < b.length(); k++) {
if (Character.isDigit(b.charAt(k))) {
idString.append(b.charAt(k));
}
}
c = idString.toString();
idString.setLength(0);
arrInt.add(Integer.parseInt(c));
}
int u = Max(arrInt) + 1;
idString.append(u);
for (int i = 0; i < idLength; i++) {
if (idString.length() < idLength) {
idString.append(" ");
} else if (idString.length() > idLength) {
idString.delete(idLength, idString.length());
}
}
} else {
idString = idString.append(1);
for (int i = 0; i < idLength - 1; i++) {
idString = idString.append(" ");
}
}
fis.close();
StringBuilder productNameString = new StringBuilder(args[productName]);
for (int i = 0; i < productNameLength; i++) {
if (productNameString.length() < productNameLength) {
productNameString.append(" ");
} else if (productNameString.length() > productNameLength) {
productNameString.delete(productNameLength, productNameString.length());
}
}
StringBuilder priceString = new StringBuilder(args[price]);
for (int i = 0; i < priceLength; i++) {
if (priceString.length() < priceLength) {
priceString.append(" ");
} else if (priceString.length() > priceLength) {
priceString.delete(priceLength, priceString.length());
}
}
StringBuilder quantityString = new StringBuilder(args[quantity]);
for (int i = 0; i < quantityLength; i++) {
if (quantityString.length() < quantityLength) {
quantityString.append(" ");
} else if (quantityString.length() > quantityLength) {
quantityString.delete(quantityLength, quantityString.length());
}
}
StringBuilder allDate = new StringBuilder();
allDate.append(idString);
allDate.append(productNameString);
allDate.append(priceString);
allDate.append(quantityString);
FileOutputStream fos = new FileOutputStream(fileName, true);
fos.write('\n');
for (int i = 0; i < allDate.length(); i++) {
fos.write(allDate.charAt(i));
}
fos.close();
}
}