Я новичок в Java и портирую одну из своих библиотек C ++ на Java в качестве учебного эксперимента. Это не домашняя работа (как должно быть видно из просмотра моего кода). У меня есть несколько вопросов относительно следующего кода моего конструктора для программы чтения файлов форм ESRI.
import java.io.*;
/**
*
* @author Bill
*/
public class ShapeFileReader {
public FileInputStream inStream;
/*
* @param fileName File name string. Must not be null or zero length.
* @throws Exception if file specified by fileName fails to open
*/
public ShapeFileReader(String fileName) throws IOException {
if(fileName == null)
throw new NullPointerException("fileName was null");
if(fileName.length() == 0)
throw new IllegalArgumentException("fileName string length was zero");
File fi = new File(fileName);
if(fi.exists() == false)
throw new IOException("File does not exist: " + fileName);
// Catch-or-specify (this method already throws IOException)
inStream = new FileInputStream(fileName);
}
}
Во время проверки параметров и их существования я должен выдавать исключения, как показано? Проверка выдает непроверенные исключения, а существование выдает проверенные исключения. Я предполагаю, что конструктор FileInputStream
также выдаст IOException
, но я указал это в предложении метода throws
.
Я рассматривал возможность рефакторинга открытия файла в отдельную функцию, но я подумал, что это будет более полезно и просто сделать в конструкторе, а также научит меня, как управлять ошибками здесь. Кроме того, любой экземпляр этого объекта не будет иметь закрытого / открытого состояния. Все эти объекты зарезервированы исключительно для ЧТЕНИЯ только файла, поэтому они создаются по мере необходимости для каждого файла. Я предоставлю close()
метод отдельно.
Кроме того, с точки зрения расширяемости, будет ли сложно адаптироваться к чтению файла по сети, используя FileInputStream
с текущим конструктором? Или я должен использовать другой класс и несколько конструкторов?
Спасибо за любой вклад.