• ,

task32.task3210 или очередная бяка валидатора.

Уже невозможно просто бороться с валидатором, но может я всё-таки где-то не прав?
Условие:
Используем RandomAccessFile

В метод main приходят три параметра:
1) fileName — путь к файлу;
2) number — число, позиция в файле;
3) text — текст.

Считать текст с файла начиная с позиции number, длинной такой же как и длинна переданного текста в третьем параметре.

Если считанный текст такой же как и text, то записать в конец файла строку ‘true‘, иначе записать ‘false‘.
Используй RandomAccessFile и его методы seek(long pos), read(byte b[], int off, int len), write(byte b[]).
Используй convertByteToString(byte readBytes[]) для конвертации считанной строчки в текст
.

Вот мой код:
public class Solution {
public static void main(String... args) throws IOException {
    RandomAccessFile file=new RandomAccessFile(args[0],"rw");
    int n=Integer.parseInt(args[1]);
    file.seek(n);
    String text=args[2];
    byte[] fileText=new byte[(int)file.length()];
    file.read(fileText,0,text.length());
    file.seek(file.length());
    String shoudBeWritten="";
    if(convertByteToString(fileText).equals(text))shoudBeWritten="true";
    else if(!convertByteToString(fileText).equals(text))shoudBeWritten="false";
    file.writeChars(shoudBeWritten);
    file.close();
}
private static String convertByteToString(byte readBytes[]){
    return String.valueOf(readBytes);
}
}
  • ,

level18.lesson10.home10 со всеми реализациями не проходит проверку

Доброго времени суток. Вариант программы рабочий, готовые темы форума не помогли, обсуждение на форуме аналогично.

Более подробно с примерами работы и обсуждением на форуме

(Решено)Задача level18.lesson10.bonus03 Проблема с записью в в файл.

Серьезно споткнулся на этой задаче. Притом, на одном месте. При записи в файл полностью удаляет весь текст. Пробовал изначально через FileWriter с разными append-ами, записывает текст только при «true», вернее, дописывает в конец файла, что не подходит.
С самой задачей проблем, вроде, нет — ничего мега-сложного, все решаемо. Понимаю, что где-то в мелочи ошибка, но найти не могу. Уже третий раз с нуля переписываю.

/* Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id - 8 символов
productName - название товара, 30 chars (60 bytes)
price - цена, 8 символов
quantity - количество, 4 символа
-u  - обновляет данные товара с заданным id
-d  - производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)

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

Пример:
19846   Шорты пляжные синие           159.00  12
198478  Шорты пляжные черные с рисунко173.00  17
19847983Куртка для сноубордистов, разм10173.991234
*/

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Solution
{
    public static void main(String[] args) throws Exception
    {
//        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<String> result = new ArrayList<>();
        BufferedReader inStream = new BufferedReader(new FileReader("c:/temp/empty2.txt"));
        BufferedWriter outStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:/temp/empty2.txt")));
        String readFromFile;
        while ((readFromFile = inStream.readLine()) != null)
        {
            result.add(readFromFile);
        }
        inStream.close();
        String strID = String.format("%-8.8s", args[1]);
        String strPrice = String.format("%-8.8s", args[args.length - 2]);
        String strQuantity = String.format("%-4.4s", args[args.length - 1]);
        String temp = "";
        for (int i = 2; i < args.length - 2; i++)
        {
            temp += args[i] + " ";
        }
        String strName = String.format("%-30.30s", temp);
/*-----------------------------------------"-u"--------------------------------------------*/
        if (args[0].equals("-u"))
        {
            for (int i = 0; i < result.size(); i++)
            {
                if (result.get(i).substring(0,8).equals(strID)) {
                    result.set(i, strID + strName + strPrice + strQuantity);
                }
            }
            for (String element : result) {
                outStream.write(element);
                outStream.newLine();
            }
        }
        outStream.close();
    }

}

FileReader

Добрый день! Объясните, пожалуйста, метод действия FileReader'a. Он читает целиком строку, а потом переходит на следующую? Или по символам?

В этом коде:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()));
ArrayList<Integer> lines = new ArrayList<Integer>();
String line;
while((line = fileReader.readLine()) != null)
{
int i = Integer.parseInt(line);
lines.add(i);
}

что именно делают строки:

String line;
while((line = fileReader.readLine()) != null){}