public class AddDetails extends Application {
private final String FileName = "C:\\Users\\marsh\\OneDrive\\Documents\\CustomPrograms\\CalcProb\\Players.txt";
private String Name;
private char Hand1, Hand1;
private double Skill1, Skill2;
File file = new File(FileName);
FileOutputStream fos = null;
Writer writer = null;
static Stage classStage = new Stage();
String x = null;
public AddDetails() {
Name = "";
Hand = '\0';
Skill = 0.0;
BHand = '\0';
BSkill = 0.0;
}
@SuppressWarnings("restriction")
@Override
public void start(Stage myStage) throws IOException {
classStage = myStage;
myStage.setTitle("Details");
GridPane rootNode = new GridPane();
rootNode.setPadding(new Insets(15));
rootNode.setHgap(5);
rootNode.setVgap(5);
rootNode.setAlignment(Pos.CENTER);
Scene myScene = new Scene(rootNode, 300, 200);
rootNode.add(new Label("Name:"), 0, 0);
TextField name = new TextField();
rootNode.add(name, 1, 0);
rootNode.add(new Label("Hand:"), 0, 1);
TextField hand = new TextField();
rootNode.add(hand, 1, 1);
rootNode.add(new Label("Skill:"), 0, 2);
TextField skill = new TextField();
rootNode.add(skill, 1, 2);
rootNode.add(new Label("Skill:"), 0, 3);
TextField Bskill = new TextField();
rootNode.add(Bskill, 1, 3);
rootNode.add(new Label("Hand:"), 0, 4);
TextField Bhand = new TextField();
rootNode.add(Bhand, 1, 4);
Button SButton = new Button("Store");
rootNode.add(SButton, 1, 5);
GridPane.setHalignment(SButton, HPos.LEFT);
Button EButton = new Button("Finish");
rootNode.add(EButton, 1, 5);
GridPane.setHalignment(EButton, HPos.RIGHT);
name.setPromptText("Enter Name");
hand.setPromptText("Enter Hand );
skill.setPromptText("Enter Skill");
Bhand.setPromptText("Enter Hand");
Bskill.setPromptText("Enter Skill");
myStage.setScene(myScene);
myStage.show();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
fos = new FileOutputStream(file, true);
writer = new OutputStreamWriter(fos, "UTF-8");
EButton.setOnAction(e -> {
myStage.close();
try {
writer.close();
} catch (IOException writerclose) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + writerclose.getMessage());
}
});
SButton.setOnAction(e -> {
Name = name.getText();
Hand = hand.getText().charAt(0);
Skill = Double.valueOf(skill.getText());
BSkill = Double.valueOf(Bskill.getText());
BHand = Bhand.getText().charAt(0);
Hand = Character.toUpperCase(Hand);
BHand = Character.toUpperCase(BHand);
System.out.println(Name + "\t" + Hand + "\t" + Skill + "\t" + BHand + "\t" + BSkill);
try {
writer.write(Name + "\t" + Hand + "\t" + Skill + "\t" + BHand + "\t" + BSkill);
name.clear();
hand.clear();
skill.clear();
Bskill.clear();
Bhand.clear();
} catch (IOException br) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + br.getMessage());
}
});
} catch (IOException e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + e.getMessage());
} finally {
try {
if (writer != null)
writer.close();
if (fos != null)
fos.close();
} catch (IOException finalclose) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + finalclose.getMessage());
}
}
}
public static void main(String[] Args) {
launch(Args);
}
}
Asked
Active
Viewed 243 times
-3
teppic
- 6,312
- 1
- 26
- 32
-
4Firstly your code is not formatted correctly, secondly, create a minimal, complete and verifiable example: https://stackoverflow.com/help/mcve – Sep 10 '17 at 21:01
2 Answers
0
You're closing your output file immediately after it's opened, without writing anything.
The open and close run in your main thread when start
is called, while the attempted write happens in the event thread when SButton
is clicked.
A simple fix would be to open and close fos
in the SButton
action listener that is doing the write.
teppic
- 6,312
- 1
- 26
- 32
0
This is one option of the code.
I think you don't need to be the Writer class as a global variable. You just open and write your contents every time whenever you want to modify your file.
I just fixed some error and made it run.
SButton.setOnAction(e -> {
//.... skip
try {
fos = new FileOutputStream(file, true);
writer = new OutputStreamWriter(fos, "UTF-8");
writer.write(Name + "\t" + Hand + "\t" + Skill + "\t" + BHand + "\t" + BSkill);
name.clear();
hand.clear();
skill.clear();
Bskill.clear();
Bhand.clear();
writer.flush();
} catch (IOException br) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + br.getMessage());
}
finally {
try {
if (writer != null)
writer.close();
if (fos != null)
fos.close();
} catch (IOException finalclose) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + finalclose.getMessage());
}
}
});
So, the full source is here
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class AddDetails extends Application {
private final String FileName = "C:\\Users\\marsh\\OneDrive\\Documents\\CustomPrograms\\CalcProb\\Players.txt";
private String Name;
private char Hand, BHand;
private double Skill, BSkill;
private final File file = new File(FileName);
static Stage classStage = new Stage();
String x = null;
public AddDetails() {
Name = "";
Hand = '\0';
Skill = 0.0;
BHand = '\0';
BSkill = 0.0;
}
@SuppressWarnings("restriction")
@Override
public void start(Stage myStage) throws IOException {
classStage = myStage;
myStage.setTitle("Details");
GridPane rootNode = new GridPane();
rootNode.setPadding(new Insets(15));
rootNode.setHgap(5);
rootNode.setVgap(5);
rootNode.setAlignment(Pos.CENTER);
Scene myScene = new Scene(rootNode, 300, 200);
rootNode.add(new Label("Name:"), 0, 0);
TextField name = new TextField();
rootNode.add(name, 1, 0);
rootNode.add(new Label("Hand:"), 0, 1);
TextField hand = new TextField();
rootNode.add(hand, 1, 1);
rootNode.add(new Label("Skill:"), 0, 2);
TextField skill = new TextField();
rootNode.add(skill, 1, 2);
rootNode.add(new Label("Skill:"), 0, 3);
TextField Bskill = new TextField();
rootNode.add(Bskill, 1, 3);
rootNode.add(new Label("Hand:"), 0, 4);
TextField Bhand = new TextField();
rootNode.add(Bhand, 1, 4);
Button SButton = new Button("Store");
rootNode.add(SButton, 1, 5);
GridPane.setHalignment(SButton, HPos.LEFT);
Button EButton = new Button("Finish");
rootNode.add(EButton, 1, 5);
GridPane.setHalignment(EButton, HPos.RIGHT);
name.setPromptText("Enter Name");
hand.setPromptText("Enter Hand ");
skill.setPromptText("Enter Skill");
Bhand.setPromptText("Enter Hand");
Bskill.setPromptText("Enter Skill");
myStage.setScene(myScene);
myStage.show();
EButton.setOnAction(e -> {
myStage.close();
});
SButton.setOnAction(e -> {
Name = name.getText();
Hand = hand.getText().charAt(0);
Skill = Double.valueOf(skill.getText());
BSkill = Double.valueOf(Bskill.getText());
BHand = Bhand.getText().charAt(0);
Hand = Character.toUpperCase(Hand);
BHand = Character.toUpperCase(BHand);
FileOutputStream fos = null;
Writer writer = null;
System.out.println(Name + "\t" + Hand + "\t" + Skill + "\t" + BHand + "\t" + BSkill);
try {
fos = new FileOutputStream(file, true);
writer = new OutputStreamWriter(fos, "UTF-8");
writer.write(Name + "\t" + Hand + "\t" + Skill + "\t" + BHand + "\t" + BSkill);
name.clear();
hand.clear();
skill.clear();
Bskill.clear();
Bhand.clear();
writer.flush();
} catch (IOException br) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + br.getMessage());
}
finally {
try {
if (writer != null)
writer.close();
if (fos != null)
fos.close();
} catch (IOException finalclose) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Error Encountered");
alert.setContentText("Error: " + finalclose.getMessage());
}
}
});
}
public static void main(String[] Args) {
launch(Args);
}
}
The input variable is the picture below,
The saved file looks like as follows,
Regards,
tommybee
- 2,175
- 1
- 17
- 23