Ich habe einen Pizza-Bestellsystem erzeugt für eine Hausaufgabe. Jetzt soll ich, wenn ich im Menü Bestellung auf Lesen klicke, die Textdatei ausgelesen werden. Allerdings erkennt der Scanner obwohl etwas in der Textdatei steht nichts und gibt dann im Dialogfenster nur ein leeres Array aus. Muss ich die Textdatei irgendwie noch freigeben oder so was?
Es passiert auch nur wenn ich das Programm starte und direkt auf Lesen klicke, wenn ich zuerst mit der Methode writeOrderCSV in die Datei schreibe, erkennt er es.
[CODE lang="java" title="Controller" highlight="27,28"]public class Controller {
private PizzaKonfigurator view;
private DataStorage dataStorage;
private Pizza pizza;
private Order order;
public static void main(String[] args) {
PizzaKonfigurator view = new PizzaKonfigurator();
new Controller(view);
view.setVisible(true);
}
public Controller(PizzaKonfigurator view) {
this.view = view;
order = new Order();
dataStorage = new DataStorage();
initController();
}
/**
* Initialisiert den Controller mit allen Aktionen
*/
public void initController() {
view.getMyMenuBar().getMenuItemBeenden().addActionListener(e -> System.exit(0));
view.getMyMenuBar().getMenuItemLesen().addActionListener(e -> {
JOptionPane.showMessageDialog(view, "Bestellung " + order.getOrderId() + order.getPizzas(), "Bestellung", JOptionPane.INFORMATION_MESSAGE);
});
view.getMyMenuBar().getMenuItemSpeichern().addActionListener(e -> dataStorage.writeOrderCSV(order));
view.getPizzaSize().addActionListener(e -> view.getPizzaSize().getSelectedItem());
for (JRadioButton topping : view.getToppings()) {
topping.addActionListener(e -> topping.getText());
}
Object[] options = {"Ja", "Nein"};
view.getFertig().addActionListener(e -> {
pizzaErzeugen();
JOptionPane.showMessageDialog(view, "Preis: " + pizza.getPrice(), "Bestellung", JOptionPane.INFORMATION_MESSAGE);
int n = JOptionPane.showOptionDialog(view, "Möchten Sie die Pizza zur Bestellung hinzufügen?", "Bestellung", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (n == JOptionPane.YES_OPTION) {
order.addPizza(pizza);
}
});
view.getBeenden().addActionListener(e -> {
int n = JOptionPane.showOptionDialog(view, "Möchten Sie die Anwendung wirklich beenden?", "Beenden", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (n == JOptionPane.YES_OPTION) {
System.exit(0);
}
});
}[/CODE]
[CODE lang="java" title="DataStorage" highlight="22"]public void writeOrderCSV(Order order) {
try {
pWriter = new PrintWriter(new BufferedWriter(new FileWriter("bestellung.txt")));
pWriter.println("Bestellung: ");
for (Pizza pizza : order.getPizzas()) {
pWriter.format("Größe: %s ; Beläge: %s ; Preis: %,.2f %n", pizza.getSize(), pizza.getToppings(), pizza.getPrice());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Fehler" , "Fehler", JOptionPane.WARNING_MESSAGE);
} finally {
if (pWriter != null) {
pWriter.close();
}
}
}
public Order readOrderCSV() {
Order order = new Order();
try {
Scanner s = new Scanner(new BufferedReader(new FileReader("bestellung.txt")));
Pizza pizza = null;
while (s.hasNext(";")) {
s.useDelimiter(";");
//Größe auslesen
String size = s.next();
for (PizzaSize psize : PizzaSize.values()) {
if (size.contains(psize.toString())) {
pizza = new Pizza(psize);
}
}
//Toppings auslesen
String belaege = s.next();
for (PizzaTopping topping : PizzaTopping.values()) {
if (belaege.contains(topping.toString())) {
pizza.toppingHinzufügen(topping);
}
}
order.addPizza(pizza);
s.useDelimiter(System.lineSeparator());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Die angegebene Datei existiert nicht" , "Datei", JOptionPane.WARNING_MESSAGE);
}
return order;
}[/CODE]
[CODE lang="java" title="Textdatei.txt"]Bestellung:
Größe: Klein ; Beläge: [Salami, Ananas, Käse, Schinken] ; Preis: 13,00
Größe: Klein ; Beläge: [Nutella, Ananas] ; Preis: 6,00[/CODE]
Es passiert auch nur wenn ich das Programm starte und direkt auf Lesen klicke, wenn ich zuerst mit der Methode writeOrderCSV in die Datei schreibe, erkennt er es.
[CODE lang="java" title="Controller" highlight="27,28"]public class Controller {
private PizzaKonfigurator view;
private DataStorage dataStorage;
private Pizza pizza;
private Order order;
public static void main(String[] args) {
PizzaKonfigurator view = new PizzaKonfigurator();
new Controller(view);
view.setVisible(true);
}
public Controller(PizzaKonfigurator view) {
this.view = view;
order = new Order();
dataStorage = new DataStorage();
initController();
}
/**
* Initialisiert den Controller mit allen Aktionen
*/
public void initController() {
view.getMyMenuBar().getMenuItemBeenden().addActionListener(e -> System.exit(0));
view.getMyMenuBar().getMenuItemLesen().addActionListener(e -> {
JOptionPane.showMessageDialog(view, "Bestellung " + order.getOrderId() + order.getPizzas(), "Bestellung", JOptionPane.INFORMATION_MESSAGE);
});
view.getMyMenuBar().getMenuItemSpeichern().addActionListener(e -> dataStorage.writeOrderCSV(order));
view.getPizzaSize().addActionListener(e -> view.getPizzaSize().getSelectedItem());
for (JRadioButton topping : view.getToppings()) {
topping.addActionListener(e -> topping.getText());
}
Object[] options = {"Ja", "Nein"};
view.getFertig().addActionListener(e -> {
pizzaErzeugen();
JOptionPane.showMessageDialog(view, "Preis: " + pizza.getPrice(), "Bestellung", JOptionPane.INFORMATION_MESSAGE);
int n = JOptionPane.showOptionDialog(view, "Möchten Sie die Pizza zur Bestellung hinzufügen?", "Bestellung", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (n == JOptionPane.YES_OPTION) {
order.addPizza(pizza);
}
});
view.getBeenden().addActionListener(e -> {
int n = JOptionPane.showOptionDialog(view, "Möchten Sie die Anwendung wirklich beenden?", "Beenden", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (n == JOptionPane.YES_OPTION) {
System.exit(0);
}
});
}[/CODE]
[CODE lang="java" title="DataStorage" highlight="22"]public void writeOrderCSV(Order order) {
try {
pWriter = new PrintWriter(new BufferedWriter(new FileWriter("bestellung.txt")));
pWriter.println("Bestellung: ");
for (Pizza pizza : order.getPizzas()) {
pWriter.format("Größe: %s ; Beläge: %s ; Preis: %,.2f %n", pizza.getSize(), pizza.getToppings(), pizza.getPrice());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Fehler" , "Fehler", JOptionPane.WARNING_MESSAGE);
} finally {
if (pWriter != null) {
pWriter.close();
}
}
}
public Order readOrderCSV() {
Order order = new Order();
try {
Scanner s = new Scanner(new BufferedReader(new FileReader("bestellung.txt")));
Pizza pizza = null;
while (s.hasNext(";")) {
s.useDelimiter(";");
//Größe auslesen
String size = s.next();
for (PizzaSize psize : PizzaSize.values()) {
if (size.contains(psize.toString())) {
pizza = new Pizza(psize);
}
}
//Toppings auslesen
String belaege = s.next();
for (PizzaTopping topping : PizzaTopping.values()) {
if (belaege.contains(topping.toString())) {
pizza.toppingHinzufügen(topping);
}
}
order.addPizza(pizza);
s.useDelimiter(System.lineSeparator());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Die angegebene Datei existiert nicht" , "Datei", JOptionPane.WARNING_MESSAGE);
}
return order;
}[/CODE]
[CODE lang="java" title="Textdatei.txt"]Bestellung:
Größe: Klein ; Beläge: [Salami, Ananas, Käse, Schinken] ; Preis: 13,00
Größe: Klein ; Beläge: [Nutella, Ananas] ; Preis: 6,00[/CODE]