Импорт библиотеки в Eclipse

У меня есть проект Eclipse, в который я импортировал библиотеку OpenCSV как внешний JAR. Библиотека теперь отображается в моем проекте в разделе «ссылочные библиотеки».

Однако, когда я звоню:

CSVReader reader = new CSVReader(new FileReader(csvPath));

Eclipse выдает ошибку о том, что конструктор CSVReader не определен. csvPath имеет тип String.

Какие-нибудь мысли?

РЕДАКТИРОВАТЬ: Скриншот

Мое рабочее пространство


person MrD    schedule 01.09.2014    source источник
comment
Какую версию библиотеки вы импортировали? Вы уверены, что конструктор присутствует в этой версии?   -  person tobias_k    schedule 01.09.2014
comment
Привет @tobias_k, да, ты прав, очевидно, что в последнем обновлении конструктор принимает «Читатель», но java говорит мне, что невозможно инициировать такой тип..   -  person MrD    schedule 01.09.2014
comment
Это потому, что Reader является абстрактным классом. Однако FileReader является Reader, так что это не должно быть проблемой. Может быть, на вашем пути к классу есть другой класс с таким же именем?   -  person tobias_k    schedule 01.09.2014
comment
@tobias_k Я добавил скриншот своего рабочего пространства   -  person MrD    schedule 01.09.2014
comment
вы должны добавить попробовать и поймать   -  person snow8261    schedule 01.09.2014
comment
Ничего, если вместо этого я выброшу исключение IOException в подписи method? @snow8261   -  person MrD    schedule 01.09.2014
comment
ты тоже можешь это сделать   -  person snow8261    schedule 01.09.2014
comment
Кстати, не рекомендуется использовать заглавные буквы в именах методов.   -  person s.d    schedule 01.09.2014
comment
@snow8261 теперь сигнатура моего метода: public ArrayList‹Map‹String, String›› ReadCSV(String csvPath) выдает IOException, но это все равно не решает проблему.   -  person MrD    schedule 01.09.2014


Ответы (5)


Я могу ошибаться (я не пользуюсь этой библиотекой и не знаю истории названий ее пакетов), но похоже, что autoEvoSuite это ваш собственный пакет.

Если это так, тогда у вас конфликт имени класса (на самом деле конфликта нет, вы просто используете неправильный класс), так как ваш класс также называется CSVReader, поэтому внутри метода readCVS вы вызываете не конструктор au.com.bytecode.opencsv.CSVReader, а конструктор своего собственного класса autoEvoSuite.CSVReader, и поскольку в вашем классе нет

public CSVReader(FileReade reader){...}

конструктор, компилятор информирует вас об этой проблеме.

Чтобы решить эту проблему, подумайте о том, чтобы переименовать свой класс, или укажите явно и укажите, какой именно класс вы хотите использовать, написав его полное имя пакета, например

au.com.bytecode.opencsv.CSVReader reader = new au.com.bytecode.opencsv.CSVReader(new FileReader(csvPath));
person Pshemo    schedule 01.09.2014
comment
Да, конечно... Видел бы сам, но большое спасибо! :) Починил это! - person MrD; 01.09.2014

вы должны попытаться поймать FileNotFoundException и увидеть код ниже.

public FileReader(String fileName) throws FileNotFoundException {
    super(new FileInputStream(fileName));
}

вы можете изменить его следующим образом

   try {
        CSVReader reader = new CSVReader(new FileReader(csvPath));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
person snow8261    schedule 01.09.2014
comment
Можете ли вы привести пример, пожалуйста? - person MrD; 01.09.2014
comment
вы также можете бросить IOException в подпись method - person snow8261; 01.09.2014

Вы вызываете конструктор для своего собственного класса CSVReader, которого не существует! Либо переименуйте свой класс и создайте новый экземпляр au.com.bytecode.opencsv, либо удалите соответствующую строку, убедитесь, что вы импортируете au.com.bytecode.opencsv.CSVReader, и заново создайте строку.

В качестве альтернативы - но я не уверен, что это то, что вам нужно, - вы можете создать свой CSVReader (оптимально под другим именем), расширить au.com.bytecode.opencsv.CSVReader и переопределить соответствующий конструктор.

Я предполагаю, что ваша проблема была вызвана тем, что вы использовали автозаполнение для CSVReader и не выбрали класс из правильного пакета?

person s.d    schedule 01.09.2014
comment
@DarioP это причина. - person snow8261; 01.09.2014

Вам нужно добавить соответствующий JAR в путь сборки проекта, чтобы он был построен.

Ваш Java-проект (щелкните правой кнопкой мыши) -> Свойства -> Путь сборки Java -> Библиотеки -> Добавить JAR/Добавить внешние JAR

введите здесь описание изображения

person Sid    schedule 01.09.2014

Мое полное решение указано здесь, попробуйте поработать с CSVParser вместо, который доступен в Apache Commons и работает гораздо охотнее!

person StackG    schedule 11.01.2017