wczytywanie pliku .arff

0

Witam mam problem z wczytaniem pliku z programu weka z rozszerzeniem .arff Ogólnie mój kod tak się przedstawia

import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class odczytarff {
public static void main(String[] args) throws FileNotFoundException{

BufferedReader reader = new BufferedReader(
new FileReader("C:/XXXXXXXX.arff"));
*Instances data = new Instances(reader);
*reader.close();
// setting class attribute
data.setClassIndex(data.numAttributes() - 1);
}
}

wszystko niby fajnie z tym, że tam gdzie oznaczylem gwiazdka wywala błąd:
" unreported exception IOexception; must be caught or declared to be thrown" Nie wiem o co chodzi bo ten wyjątek wyraża się chyba w tym "throws FileNotFoundException{" co pisze po metodzie a przynajmniej tak mi sie wydawalo. Próbowałem jeszcze czegoś takiego:

import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class odczytarff {
public static void main(String[] args) {

try {
BufferedReader reader = new BufferedReader(
new FileReader("C:/XXXXXXXXXX.arff"));}
catch (IOException e) { Instances data = new Instances(reader);
reader.close();}
// setting class attribute
data.setClassIndex(data.numAttributes() - 1);}
}
}

ale to też nie dało pozytywnych rezultatów. Byłbym wdzięczny za pomoc

0

Widocznie ogólny wyjątek IOexception nie wyraża się przez wyjątek FileNotFoundException. Spójrz sobie do dokumentacji/kodu tej klasy Instances (z tego pakietu weka.core.Instances co importujesz) i tam powinno być jaki wyjątek rzuca.

Zastąpienie szczegółowego wyjątku bardziej ogólnym to chyba nie najlepsze rozwiązanie (ale powinno działać):

Rozwiązanie I:

import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class odczytarff {
	public static void main(String[] args) throws IOException{
		BufferedReader reader = new BufferedReader(
		new FileReader("C:/XXXXXXXX.arff"));
		Instances data = new Instances(reader);
		reader.close();
		
		// setting class attribute
		data.setClassIndex(data.numAttributes() - 1);
	}
}

Rozwiązanie II:
(ty tam namieszałeś przy catch - to powinno złapać wyjątek jeśli wystąpi)

import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class odczytarff {
public static void main(String[] args) {

	try {
		BufferedReader reader = new BufferedReader(
		new FileReader("C:/XXXXXXXXXX.arff"));
		Instances data = new Instances(reader);
		reader.close();
	}
	catch (IOException e) { 
		System.out.println("Wyjątek:" + e);
	}
	// setting class attribute
	data.setClassIndex(data.numAttributes() - 1);}
}

I - metoda main oddelegowuje wyjątek (czyli jeśli wystąpi to program się wysypie).
II - w programie łapiesz wyjątek i możesz na to zareagować (np. ponowić próbę, albo wypisać komunikat).
Ogólnie poczytaj o łapaniu wyjątków.

PS. Używaj tagów na forum, łatwiej się czyta kod źródłowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1