• ,

task1630

Компилируется, читает оба файла и выводит в консоль 2 строки с содержимым файлов как и требуется заданием, но валидацию не проходит…

(Метод run класса ReadFileThread должен считывать строки из файла, установленного методом setFileName. А метод getFileContent, этого же класса, должен возвращать вычитанный контент. Возвращаемое значение — это одна строка, состоящая из строк файла, разделенных пробелами. — Содержимое файла должен вычитывать метод run.)

package com.javarush.task.task16.task1630;

import java.io.*;

public class Solution {
    public static String firstFileName;
    public static String secondFileName;

    //add your code here - добавьте код тут
    static {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            firstFileName = reader.readLine();
            secondFileName = reader.readLine();
        } catch (IOException e) { }
    }

    public static void main(String[] args) throws InterruptedException {
        systemOutPrintln(firstFileName);
        systemOutPrintln(secondFileName);
    }

    public static void systemOutPrintln(String fileName) throws InterruptedException {
        ReadFileInterface f = new ReadFileThread();
        f.setFileName(fileName);
        f.start();
        //add your code here - добавьте код тут
        f.join();
        System.out.println(f.getFileContent());
    }

    public interface ReadFileInterface {

        void setFileName(String fullFileName);

        String getFileContent();

        void join() throws InterruptedException;

        void start();
    }

    //add your code here - добавьте код тут
    public static class ReadFileThread extends Thread implements ReadFileInterface {
        private String filename;
        private String filetxt;

        public void run(){
            File f = new File(filename);
            String line;
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(f));
                while ((line = filereader.readLine()) != null){
                    if (filetxt == null) {
                        filetxt = line;
                    } else
                        filetxt += " "+line;
                }
                filereader.close();

            } catch (IOException e) {
                System.out.println("Error!");
            }
        }

        @Override
        public void setFileName(String fullFileName) {
            filename = fullFileName;
        }

        @Override
        public String getFileContent() {
            return filetxt;
        }
    }
}

8 комментариев

Lynx89
reader.close()
BlackDox
filereader.close(); — у меня такое есть
Lynx89
в статическом блоке
BlackDox
да, это конечно упущение, но сути не меняет.
Fabolo
Не знаю на сколько это относится именно к валидатору, но я бы посоветовал делать конкатенацию строк через StringBuilder.

А что конкретно касается валидатора, вроде там должно быть условие, что
«Метод setFileName должен напрямую устанавливать имя файла, из которого будет читаться содержимое»
BlackDox
StringBuilder приму к сведению, спасибо!
«Метод run класса ReadFileThread должен считывать строки из файла, установленного методом setFileName» — вот и всё.
Fabolo
  • Fabolo
  • +1
  • Комментарий отредактирован 2017-09-27 16:21:09 пользователем Fabolo
Попробуйте заменить свою реализацию метода run() на более компактную, возможно валидатору именно это не нравится. fileName в этом примере это строка, не обязательно создавать объект типа File. И не забывайте закрывать все потоки ввода/вывода

<code>
private StringBuilder result = new StringBuilder();

public void run() {
    try (BufferedReader fileReader = new BufferedReader(new FileReader(fileName))) {
        while (fileReader.ready()) result.append(fileReader.readLine()).append(" ");
    } catch (IOException e) {
         e.printStackTrace();
    }
}

@Override
public String getFileContent() {
    return result.toString.trim();
}</code>
BlackDox
Низкий вам поклон! Выручили! Валидатор принял, наконец!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.