Import danych (string, int) z txt do JTable

0

Cześć,
robię taki mały programik, który pozwala na zapis i odczyt danych (string, int) z pliku txt do JTable. Chodzi o zapis danych, których potrzebuje często, a Excel już nie spisuje się za dobrze.
O ile udało mi się zapisywać z JTable do txt, to z odczytem mam problem. dane zapisane na liście na pewno są odczytywane (pojawiają się w konsoli jak mam System.out.print). Nie wiem, co z tym mogę zrobić.

Nowe dane do JTable zapisuje najpierw do List<String>, potem mam taką metodę addrow (poniżej) i w ten sposób dodaje mi się nowy wiersz w JTable:

public void addRow(List rowData)
    {
        data.add(rowData);
        fireTableRowsInserted(data.size() - 1, data.size() - 1);
    }

Tak wygląda funkcja eksportująca dane do pliku txt (zapisują się wszystkie dane, łącznie z nagłówkami):

private void toExcel(JTable table, File file){
	try{
		BufferedWriter bfw = new BufferedWriter(new FileWriter(file));
		for(int i = 0 ; i < table.getColumnCount() ; i++)
		{
			bfw.write(table.getColumnName(i));
			bfw.write("\t");
		}

		for (int i = 0 ; i < table.getRowCount(); i++)
		{
		bfw.newLine();
		for(int j = 0 ; j < table.getColumnCount();j++)
			{
			bfw.write((String)(table.getValueAt(i,j)));
			bfw.write("\t");;
			}
		}
		bfw.close();

		}catch (Exception e1) { 
			System.out.println("Błąd!"+ e1.getMessage()); 
		}
	}

Tak wygląda funkcja odczytująca przy starcie programu dane :

public void importData(File file) {
	TableClass model = new TableClass();
	List<String> newdata = new ArrayList<String>();
	
	try{
		BufferedReader reader = new BufferedReader(new FileReader(file));
		String line = null;

		while ((line = reader.readLine()) != null) 
		{
			newdata.add(line);
		}
		
		model.addRow(newdata);
		reader.close();
		} catch (IOException ex) {
			System.out.println("Błąd!"+ ex.getMessage()); 
		}
     }

A tak wywołuję odczyt danych z pliku:

public Table() {
	File fileimp = new File("results.txt");
	importData(fileimp);
	initialize();
}

Dziękuję za pomoc.

0

w funkcji importującej nie dzielisz linii na wartości. Chodzi o odpowiednik linii:

bfw.write("\t");

Który powinien wyglądać tak:

List<String[]> newdata = new ArrayList<String[]>();
//...
 newdata.add(line.split("\t"));
0

Dziękuję za odpowiedź i zainteresowanie.

Niestety coś nie działa, w konsoli mam taki komunikat:

 [Ljava.lang.String;@4a65e0[Ljava.lang.String;@665753[Ljava.lang.String;@ef22f8

Jest to pewne związane z dodaniem przez Ciebie:

List<String[]> datalist = new ArrayList<String[]>();

Jak zapisuję do txt z JTable to zapisuję dane do:

 List<String> datalist = new ArrayList<String>(); 
0

Pokaż jak wypisujesz dane... prawdopodobnie masz tam błąd

Sorki, czytałem od końca :)
Dobrze kombinujesz. Jest to związane z tym, że próbujesz wyświetlić całą tablicę a nie jej elementy. W tym momencie masz w liście obiekty(tablice Stringów) a nie Stringi

0

Zmieniłam funkcję importującą do JTable i tabela wyswietla się poprawnie w konsoli, w JTable nadal pusto.

public void importData(File file) {
		TableClass model = new TableClass();
		List<String[]> newdata = new ArrayList<String[]>();

		try{
			BufferedReader in = new BufferedReader(new FileReader(file));
	        String line = null;
	        while ((line = in.readLine()) != null) 
	        {
	            String cells[] = line.split("\t");                          
	            System.out.println(line);
	            newdata.add(cells);
	            model.addRow(newdata);
	        }
	        in.close();
	
		 	} catch (IOException ex) {
		 			System.out.println("Błąd!"+ ex.getMessage()); 
		}
     }
0

Twój kod jest trochę zbyt cząstkowy. Szukałbym odpowiedzi na Twoje pytanie w metodzie addRow. Proponuję skorzystać z konstruktora JTable np, który przyjmuje dwa Vectory. Jeden już masz z danymi z metody importData(zmień aby zwracała typ), drugi stwórz z nagłówków.

0

a nie chodzi przypadkiem jeszcze o repaint /redraw?

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