Валидатор ругается даже на то, что "Поток чтения из файла не был закрыт."
А он закрыт. Ну и на моём тестовом файле обновляет и удаляет строки.
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.nio.charset.Charset;
import java.util.Locale;
public class Solution {
public static void main(String[] args) throws Exception {
if(args.length>0&&(args[0].equals("-u"))||args[0].equals("-d")){
BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in));
String nameFile = reader1.readLine();
//String nameFile = "D:\\Java\\1.txt";
reader1.close();
RandomAccessFile reader = new RandomAccessFile(nameFile,"rw");
int int1 = reader.read(),int2 = reader.read();int displacement = 2;
Charset charset = Charset.forName("UTF-16");
if(int1==254&&int2==255)charset=Charset.forName("UTF-16BE");
else if(int1==255&&int2==254)charset=Charset.forName("UTF-16LE");
// Charset without BOM
else {
if(int1==0&&(int2>47||int2<58))charset=Charset.forName("UTF-16BE");
else if(int2==0&&(int1>47||int2<58))charset=Charset.forName("UTF-16LE");
displacement = 0;
}
//determine length buffer
reader.seek(displacement+100);
byte[] buf = new byte[4];
reader.read(buf);
String endString = new String(buf,charset);
int bufferLength = 102;
if(endString.equals("\r\n"))bufferLength=104;
reader.seek(displacement);
int idPar = Integer.parseInt(args[1].trim());
String s; int id;byte[] buffer = new byte[bufferLength];
for(long rPos=0L, wPos=0L; rPos<reader.length(); reader.seek(rPos)){
reader.read(buffer);
rPos = reader.getFilePointer();
s = new String(buffer,charset);
s = s.substring(0,8).trim();
id=0;
if(s.length()>0)id = Integer.parseInt(s);
if(id==idPar&&args[0].equals("-u")){
StringBuilder sb = new StringBuilder();
sb.append(addSpace(String.valueOf(id),8));
StringBuilder sbName = new StringBuilder();
for (int i = 2; i < args.length-2; i++) {
sbName.append(args[i]);
if(i<args.length-3)sbName.append(" ");
}
sb.append(addSpace(sbName.toString(),30));
double price = Double.parseDouble(args[args.length-2]);
sb.append(addSpace(String.format(Locale.ENGLISH, "%(.2f", price),8));
int quantity = Integer.parseInt(args[args.length-1]);
sb.append(addSpace(String.valueOf(quantity),4));
//System.out.println(sb.toString());
reader.seek(wPos);
reader.write(sb.toString().getBytes(charset));
break;
}
else if(id==idPar&&args[0].equals("-d")){
byte[] buffer1 = new byte[(int) (reader.length()-rPos)];
reader.read(buffer1);
reader.seek(wPos);
reader.write(buffer1);
reader.setLength(reader.length()-rPos+wPos);
break;
}
wPos = reader.getFilePointer();
}
reader.close();
}
}
static String addSpace(String s,int n){
for (int i = s.length(); i < n; i++) {
s+=" ";
}
return s;
}
}