swing - Trouble appending to a text file in java. Can create .txt file and add data, but gets overwritten -
ok, first...yes, homework question. i'm stuck. i've been able create .txt file , save data gui text fields. continue add file long not exit gui. launch again, entire file gets overwritten next time save (click save button on gui). i'm trying is:
-enter data gui text fields -click save button (creating file , supposed append data .txt file) -be able read file panel -be able close , reopen gui , append .txt file necessary
i'm close, i'm doing dumb fear. below java code gui, createtextfile, , readtextfile
import java.awt.color; import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.sql.sqlexception; import javax.swing.*; public class donorgui extends jframe { // components private jpanel panel; private jtextarea results; private jbutton entrybutton; private jbutton exitbutton; private jbutton clearbutton; private jbutton savebutton; private jbutton openbutton; private jtextfield donorfield; private jtextfield charityfield; private jtextfield pledgefield; //create variables string[] donorname = new string[20]; string[] charityname = new string[20]; double[] donationamt = new double[20]; int = 0; // constants window size private final int window_width = 750; private final int window_height = 525; //constructor public donorgui(){ // set title. settitle("wounded warrior donation tracker."); // specify happens when close button clicked. setdefaultcloseoperation(jframe.exit_on_close); // build panel contains other components. buildpanel(); // add panel content pane. add(panel); // size , display window. setsize(window_width, window_height); setvisible(true); } //the buildpanel method creates panel containing other components. private void buildpanel(){ // create labels display instructions. jlabel message1 = new jlabel("name of donor:"); jlabel message2 = new jlabel("name of charity:"); jlabel message3 = new jlabel("amount of pledge:"); //instantiate results area results = new jtextarea(25,60); results.seteditable(false); results.setwrapstyleword(true); results.setlinewrap(true); results.setborder(borderfactory.createloweredbevelborder()); // create text fields receive user input donorfield = new jtextfield(10); charityfield = new jtextfield(10); pledgefield = new jtextfield(10); //create user buttons cause action entrybutton = new jbutton("enter donation."); entrybutton.addactionlistener(new entrybuttonlistener()); exitbutton = new jbutton("exit"); exitbutton.addactionlistener(new exitbuttonlistener()); clearbutton = new jbutton ("clear fields"); clearbutton.addactionlistener(new clearbuttonlistener()); savebutton = new jbutton ("save"); savebutton.addactionlistener(new savebuttonlistener()); openbutton = new jbutton ("open"); openbutton.addactionlistener(new openbuttonlistener()); // create panel. panel = new jpanel(); panel.setbackground(color.orange); //set layoutmanager panel.setlayout(new flowlayout()); // add labels, text fields, , button panel. panel.add(message1); panel.add(donorfield); panel.add(message2); panel.add(charityfield); panel.add(message3); panel.add(pledgefield); panel.add(results); panel.add(entrybutton); panel.add(clearbutton); panel.add(savebutton); panel.add(openbutton); panel.add(exitbutton); } private class entrybuttonlistener implements actionlistener { public void actionperformed(actionevent e) { donorname[i] = donorfield.gettext(); charityname[i] = charityfield.gettext(); if (donationamt(pledgefield.gettext())) { donationamt[i] = double.parsedouble(pledgefield.gettext()); }else{ donorfield.settext(""); charityfield.settext(""); pledgefield.settext(""); } results.append(donorname[i]+" "+charityname[i]+" "+donationamt[i]+"\n "); donorfield.settext(""); charityfield.settext(""); pledgefield.settext(""); i++; } } public boolean donationamt(string amount) { if(amount==null || amount=="" || amount.length()<1){ //checking empty field joptionpane.showmessagedialog(null, "please enter amount pledged"); return false; } for(int = 0; < amount.length(); i++){ //verifying dollar amount entered number if (!character.isdigit(amount.charat(i)) && amount.charat(i)!='.'){ joptionpane.showmessagedialog(null, "invalid input."); return false; } } return true; } private class clearbuttonlistener implements actionlistener { public void actionperformed (actionevent e) { donorfield.settext(""); charityfield.settext(""); pledgefield.settext(""); } } private class exitbuttonlistener implements actionlistener { public void actionperformed(actionevent e) { system.exit(0); } } private class savebuttonlistener implements actionlistener { public void actionperformed(actionevent e) { createtextfile cr = new createtextfile(); cr.openfile(); cr.addrecords(donorname, charityname, donationamt); cr.closefile(); javadbclass db = new javadbclass(); } } private class openbuttonlistener implements actionlistener { public void actionperformed(actionevent e) { readtextfile read = new readtextfile(); read.openfile(); donorgui donor = read.readrecords(); read.closefile(); javadbclass db = new javadbclass(donor); for(int = 0;i<donor.donationamt.length;i++){ try { results.append(db.showtable()[i]+"\n"); } catch (sqlexception e1) { // todo auto-generated catch block e1.printstacktrace(); } } } } /* application method */ public static void main(string[] args){ donorgui rpc = new donorgui(); } } create text file java code:
/** create text file based on user input , save donations.txt. * */ import java.io.filenotfoundexception; import java.util.formatter; import java.util.formatterclosedexception; import java.util.nosuchelementexception; public class createtextfile { //object outputs text file private formatter output; //try opening file public void openfile(){ try { output = new formatter("c:/prg421_data/donations.txt"); } catch (securityexception securityexception) { system.out.println("you cannot write file."); } catch (filenotfoundexception notfoundexception) { system.out.println("you couldn't open or find file."); } } //try writing file public void addrecords(string[] donor, string[] charity, double[] donation){ try{ (int j=0; j<donor.length; j++) { if (donor[j] != null) { output.format("\n%s %s %.2f",donor[j],charity[j],donation[j]); } } } catch (formatterclosedexception formatterclosedexception){ system.out.println("you couldn't write file."); } catch (nosuchelementexception elementexception){ system.out.println("invalid input."); } } //try closing file public void closefile(){ if(output!=null) output.close(); } } read text file java code:
import java.io.file; import java.io.filenotfoundexception; import java.util.scanner; public class readtextfile { private scanner input; //try open file public void openfile(){ try{ input = new scanner(new file("c:/prg421_data/donations.txt")); } catch (filenotfoundexception filenotfoundexception) { system.out.println("file not found."); system.exit(1); } } //try read file public donorgui readrecords(){ donorgui gui = new donorgui(); while(input.hasnext()) { for(int j = 0;j<20;j++){ gui.donorname[j] = input.next(); gui.charityname[j] = input.next(); gui.donationamt[j] = input.nextdouble(); } } return gui; } //try close file public void closefile(){ if(input!=null) input.close(); } }
instead of
output = new formatter("c:/prg421_data/donations.txt"); use
output = new formatter(new fileoutputstream("c:/prg421_data/donations.txt", true)); the true parameter means append.
Comments
Post a Comment