Datensätze aus Txt Datei auslesen - Datensätze durch stöbern

jFr

Mitglied
Hallo Community,

ich habe ein Programm geschrieben, welches 3 Textfelder hat und diese werden wie folgt in eine Txt-Datei gespeichert:

Inhalt1,Inhalt2,Inhalt3

Folgenden Code, habe ich hierfür verwendet:

file = new File("MeineDatei.txt");
try {
writer = new FileWriter(file ,true);
writer.write(Textfield_1.getText() + "," + Textfield_2.getText() + "," + Textfield_3.getText());

writer.write(System.getProperty("line.separator"));

writer.flush();

writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}

Das klappt alles Super!
Jetzt möchte ich gerne die Txt-Datei wieder einlesen und die Daten in den 3 Textfeldern wieder anzeigen lassen.
Und ich würde gerne mit 2 weiteren Button, alle Daten anzeigen lassen. Button(vorheriger Datensatz, nächster Datensatz)

Ist das möglich? Wenn ja wie?
Könnt Ihr mir da evtl ein Code Schnipsel geben?

Vielen Dank!


Mit freundlichen Grüßen

jFr
 
Datei einlesen:
Code:
BufferedReader br = new BufferedReader(new FileReader(new File("dat.txt")));
char[] inhalt = new char[(int)(new File("dat.txt").length())];
br.read(inhalt);
String text = new String(inhalt);

String splitten:
Code:
String text = new String(inhalt);
String[] split = text.split(","); <- Trennzeichen
/*(JTextField)*/ tf1.setText(split[0]);
tf2.setText(split[1]);
tf3.setText(split[2]);

Das ist so die einfachste Methode
 
Hallo Zusammen,

so hat es erfolgreich geklappt.

BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("MeineDatei.txt")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
char[] inhalt = new char[(int)(new File("MeineDatei.txt").length())];
try {
int read = br.read(inhalt);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String text = new String(inhalt);

String text1 = new String(inhalt);
//Trennzeichen
String[] split = text1.split(",");
/*(JTextField)*/ tf1.setText(split[0]);
tf2.setText(split[1]);
tf3.setText(split[2]);


Habt ihr evtl. einen Lösungsansatz für die Button "vorherige Datensätze" & "nächster Datensatz" ?
Ich möchte damit zwischen den einzelnen gespeicherten Datensätze in der Txt-Datei wechseln können.

Diese sind immer mit einem "line.separator" versehen.

Inhalte der Datei sieht wie folgt aus:

Inhalt1,Inhalt2,Inhalt3
Inhalt1,Inhalt2,Inhalt3
Inhalt1,Inhalt2,Inhalt3
Inhalt1,Inhalt2,Inhalt3
 
Also ich habe die Daten in der Txt-Datei.
Diese sollen dann in den 3 Textfeldern angezeigt werden.

Es wird aber immer nur der erste Datensatz in den Textfeldern angezeigt:

Inhalt1,Inhalt2,Inhalt3

Ich möchte jetzt per Button "siehe nächsten Datensatz" und Button "siehe vorherigen Datensatz" die weiteren Daten aus der Textdatei Anzeigen lassen.

Inhalt1,Inhalt2,Inhalt3

Klick - "siehe nächsten Datensatz"

Inhalt4,Inhalt5,Inhalt6 .... usw.
 
Also da ich wirklich Zeit hatte und mir langweilig war habe ich dir mal soetwas gebastelt:

Java:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

class DataSetExplorer {

	public static final String DATA_URL = System.getProperty("user.dir") + "\\data";
	public static final String DATA_FILE = "MeineDatei.txt";
	public static final String SEPARATOR = ",";

	private JTextField field1, field2, field3;
	private int cur_pos = 0;
	private int setsize = 0;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new DataSetExplorer();
			}
		});
	}

	public DataSetExplorer() {
		JFrame frame = new JFrame("DataSetExplorer");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600, 300);
		JPanel mainPanel = new JPanel(new BorderLayout());
		mainPanel.add(getFieldPanel(), BorderLayout.CENTER);
		mainPanel.add(getButtonPanel(), BorderLayout.SOUTH);

		setsize = getDataSetSize();
		setFields(loadDataSet(cur_pos));

		frame.add(mainPanel);
		frame.setVisible(true);
	}

	private void setFields(String[] data) {
		field1.setText(data[0]);
		field2.setText(data[1]);
		field3.setText(data[2]);
	}
	
	private void clearFields() {
		setFields(new String[] {"", "", ""});
	}
	
	private String[] getFields() {
		return new String[] {field1.getText(), field2.getText(), field3.getText()};
	}
	
	private JPanel getButtonPanel() {
		JPanel panel = new JPanel(new GridLayout(2, 1));
		
		JPanel navigationPanel = new JPanel(new FlowLayout());
		JButton prevButton = new JButton("<");
		prevButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(cur_pos > 0) {
					setFields(loadDataSet(--cur_pos));
				}
			}
		});
		
		JButton newDataSet = new JButton("New");
		newDataSet.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				clearFields();
				cur_pos = setsize-1;
			}
		});
		
		JButton nextButton = new JButton(">");
		nextButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(cur_pos < setsize-1) {
					setFields(loadDataSet(++cur_pos));
				}
			}
		});
		navigationPanel.add(prevButton);
		navigationPanel.add(newDataSet);
		navigationPanel.add(nextButton);
		panel.add(navigationPanel);
		
		JPanel filePanel = new JPanel(new FlowLayout());
		JButton saveSetToFile = new JButton("Save");
		saveSetToFile.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				saveDataSet(getFields());
			}
		});
		JButton loadSetFromFile = new JButton("LoadData");
		loadSetFromFile.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				cur_pos = 0;
				setFields(loadDataSet(cur_pos));
			}
		});
		filePanel.add(saveSetToFile);
		filePanel.add(loadSetFromFile);
		
		panel.add(filePanel);
		
		return panel;
	}

	private JPanel getFieldPanel() {
		JPanel panel = new JPanel(new FlowLayout());

		field1 = new JTextField(10);
		field2 = new JTextField(10);
		field3 = new JTextField(10);

		panel.add(field1);
		panel.add(field2);
		panel.add(field3);

		return panel;
	}

	public void saveDataSet(String[] data) {
		File file = new File(DATA_URL + "\\" + DATA_FILE);
		try {
			FileWriter writer = new FileWriter(file, true);

			for (int i = 0; i < data.length; i++) {
				writer.write(data[i]);
				if (i < data.length - 1) {
					writer.write(SEPARATOR);
				}
			}
			writer.write(System.getProperty("line.separator"));
			writer.flush();
			writer.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		setsize ++;
	}

	public String[] loadDataSet(int pos) {
		String[] result = new String[] {"", "", ""};
		try {
			File file = new File(DATA_URL + "\\" + DATA_FILE);
			FileReader freader = new FileReader(file);
			BufferedReader breader = new BufferedReader(freader);

			String line;
			for(int i = 0; i < pos; i++) breader.readLine();
			line = breader.readLine();
			if(line != null) result = line.split(SEPARATOR);

			breader.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return result;
	}
	
	public int getDataSetSize() {
		int result = 0;
		try {
			File file = new File(DATA_URL + "\\" + DATA_FILE);
			FileReader freader = new FileReader(file);
			BufferedReader breader = new BufferedReader(freader);

			while(breader.readLine() != null) result ++;
			breader.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return result;
	}
}
 

Zurück
Oben