компилятор понуждает использовать исключения. правильно ли начал?

 
 
 
Сообщения:30
Добрый день!
Начал изучать java совсем недавно.
Пишу первый осмысленный проект.
идея длинная, расписывать не буду.
но начало мне не нравится.
правильно ли я делаю?

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

public class Main {

    public static void main(String[] args) {
        ArrayList<String> existFiles = new ArrayList<>();

        // если не файлы не выбраны, выход из программы с сообщением.
        if (args.length == 0) {
            System.out.println("Необходимо выбрать хотя бы один файл!");
            return;
        }

        // проверить, существуют ли файлы?
        for (String file : args){
            if ((new File(file)).exists()) {
                // если существует
                existFiles.add(file);
            } else {
                // если не существует
                System.out.println("Файл " + file + " не существует!");
            }
        }

        try{
            for (String exFile : existFiles){
                FParser parseFile = new FParser(exFile);
                if(parseFile.isValid()){
                    System.out.println("Файл " + exFile + " валидный.");
                }
                else {
                    System.out.println("Файл " + exFile + " невалидный.");
                }
            }
        } catch (IOException exc2) {
            System.out.println("I/O Error: " + exc2);
        }
    }
}


import java.io.IOException;
import java.nio.file.Path;
import java.util.*;
import java.nio.file.Paths;

public class FParser {
    private Path path;
    private Scanner scanner;
    private String line;

    public FParser(String s) throws IOException {
        path = Paths.get(s);
        scanner = new Scanner(path);
    }

    public boolean isValid(){
        line = scanner.nextLine();
        if (line.contains("MEASURE Performance Monitor")) {
            return true;
        } else {
            return false;
        }
    }
}


Я долго бился в конвульсиях, пытаясь перейти на объектное мышление. До этого только perl использовал (без ООП)..
Теперь вопросы:
по классу Main
Почему компилятор вынуждает меня ловить исключения в строках 26, 36-38, если я предварительно проверил файлы на их наличие в системе - строки 16-24?
Ок. даже если так,
то, далее
конструктор класса FParser все равно принуждает писать throws IOException, для чего тогда я исключения ловил выше?

пользователь выбирает файлы. сначала идет проверка на отсутствие файлов (аргументов), проверка на существование файлов, потом проверяется валидный ли файл выбран? Валидный - это который содержит определенную подследовательность в первой строке. именно с ними я буду потом работать (регулярные выражения и т.д.)
Далее будет еще дальше в лес, и еще больше костылей, поэтому надо исправиться сейчас.
Подскажите, что-то тут не так.

синтаксически все верно.
выхлоп корректный.
Quote:
Файл /cpu/cpuout00-23/dd не существует!
Файл /cpu/cpuout00-23/cpuout00 валидный.
Файл /cpu/cpuout00-23/cpuout01 валидный.
Файл /cpu/cpuout00-23/cpu невалидный.
Файл /cpu/cpuout00-23/ddd.xcf невалидный.
Process finished with exit code 0
Изменен:20 ноя 2016 17:59
 
 
Сообщения:75
Все просто, если используешь метод, который может выбрасывать исключение (throws ...), то надо либо его
обработать, либо пробросить его дальше.

В конструкторе ты видимо вызываешь метод, который выбрасывает исключение, и ты выкидываешь его дальше в мэйн, где
в блоке try-catch ловишь и обрабатываешь.

Проверки в работе исключений не участвуют никак.

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:30
MuH3gPaB:
В конструкторе ты видимо вызываешь метод, который выбрасывает исключение, и ты выкидываешь его дальше в мэйн, где
в блоке try-catch ловишь и обрабатываешь.

честно, вообще не понял :-)

то есть я чтото не то пишу? Подскажите, плз, как надо на простом примере
 
 
Сообщения:300
ООП здесь, откровенно говоря, лишнее.

в остальном всё нормально. только поменяй местами try и for иначе при первом же исключении ты вылетишь из цикла и не сможешь обработать остаток. (хотя, если не имеет смысла обрабатывать оставшиеся, если с предыдущим случилась ошибка то всё правильно ). и не забывай закрывать scanner после работы.

а исключения нужны, чтоб не надо было отлавливать и обрабатывать кучу вещей, которые могут привести к ошибке. попробуй проверь наличие винта, и удостоверься, что электричества хватит на прочитать, и файл на месте, и прочитать дадут... а так стартуешь методу и ждёшь результата или ошибки. результат - хорошо. ошибка - смотришь, а можно ли работать без этих данных? если нельзя - выдаёшь причину и завершаешь программу. а если ничего страшного - подставляешь дефолтное значение и работаешь дальше.
 
 
Сообщения:30
Спасибо всем за ответы.
я вижу, что ООП тут не совсем в тему, но пытаюсь как то использовать классы.. объекты..
Иначе, как бы это сказать, зачем покупать трактор, если требуется вспахать одну грядку?
хочу именно ооп развивать.
 
 
Сообщения:300
вся прелесть ООП в паттернах проектирования.
то, что в процедурных языках требует кучи кода и недюжинных способностей, с ООП и паттернами превращается в прогулку по парку.
почитай "Head First Design Patterns". в своё время эта книга стала для меня откровением.
и ещё "Head First Object-Oriented Analysis and Design" тоже полезная книга.
 
 
Сообщения:30
windruf:
то, что в процедурных языках требует кучи кода и недюжинных способностей, с ООП и паттернами превращается в прогулку по парку.

спасибо. увлекательно.
вот так я получил хороший совет про паттерны даже не задавая его :)
у меня еще вопрос.
Трудно как то придумывать проекты в процессе обучения. На данный момент я на ВЫ с языком. поэтому не могу придумать задачу, которая бы вписывалась в парадигму.
Может быть есть какие то ресурсы в интернете (да, да, меня забанили в гугле) где даются задания и примерные ходы выходы?
читая чужой код (правильный код) можно избежать многих граблеФ
 
 
Сообщения:1240
hard_link:
Почему компилятор вынуждает меня ловить исключения в строках 26, 36-38, если я предварительно проверил файлы на их наличие в системе - строки 16-24?

Формально, может быть ситуация, когда сам файл есть, а прочесть его невозможно. Скажем, битые сектора на диске, куда записан файл. Записать система записала, а при чтении не совпадет CRC и система вывалится с ошибкой.
 
 
Сообщения:30
Доступно!
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет