Guest User

Untitled

a guest
Apr 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1.  
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.text.DateFormat;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.ArrayList;
  11. import java.util.Collections;
  12. import java.util.Date;
  13. import java.util.Iterator;
  14. import java.util.List;
  15. import java.util.Scanner;
  16.  
  17. /**
  18. * Tulostaulukko-luokka kuvaa tulosriveist‰ muodostettua taulukkoa. Luokka osaa
  19. * tallentaa itsens‰ tiedostoon ja lukea rivit takaisin muistiin. Luokka myˆs
  20. * toteuttaa {@link javax.swing.table.TableModel}-rajapinnan, joten sit‰ voi
  21. * k‰ytt‰‰ {@link javax.swing.JTable}-komponentin datamallina.
  22. *
  23. */
  24. public class Tulostaulukko implements Iterable<Tulosrivi> {
  25.  
  26. private static final long serialVersionUID = 1L;
  27.  
  28. private List<Tulosrivi> tulosrivit;
  29.  
  30. private int koko;
  31.  
  32. private File tiedosto;
  33.  
  34. /**
  35. * Luo uuden tulostaulukon annetun tiedostonimen perusteella. Jos tiedoston
  36. * nimi on <code>null</code> heitet‰‰n <code>NullPointerException</code>
  37. * sopivalla viestill‰ varustettuna. Tulostaulukon koko on rajoitettu. Koon
  38. * on oltava v‰hint‰‰n 1, jos ehto ei toteudu heitet‰‰n
  39. * <code>IllegalArgumentException</code> sopivalla viestill‰. Jos annettua
  40. * tiedostoa ei ole olemassa, luodaan tyhj‰ tulostaulukko. Jos tiedosto on
  41. * olemassa, tulkitaan siit‰ tulosrivit yksi kerrallaan ja tallennetaan ne
  42. * luokan tulosriveihin.
  43. *
  44. * @param tiedostonNimi
  45. * tiedosto, josta tulostaulukko luetaan.
  46. * @param koko
  47. * tulostaulukon maksimikoko.
  48. */
  49. public Tulostaulukko(String tiedostonNimi, int koko) {
  50. tulosrivit = new ArrayList<Tulosrivi>();
  51.  
  52. if(tiedostonNimi == null) {
  53. throw new NullPointerException("Tiedoston nimi on null");
  54. }
  55.  
  56. if(koko<1) {
  57. throw new IllegalArgumentException("Tiedoston koko ei ole sopiva");
  58. }
  59. else if(this.koko>=1){
  60. this.koko = koko;
  61. }
  62.  
  63. try {
  64. Scanner skanneri = new Scanner(this.tiedosto);
  65. while(skanneri.hasNextLine()) {
  66.  
  67. String tulosrivi = skanneri.nextLine();
  68.  
  69. String[] tulosrivintiedot = tulosrivi.split("&");
  70.  
  71. DateFormat ajanmuuttaja = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
  72.  
  73. try {
  74. Date ajankohta = ajanmuuttaja.parse(tulosrivintiedot[1]);
  75. tulosrivit.add(new Tulosrivi(tulosrivintiedot[0], ajankohta, Integer.parseInt(tulosrivintiedot[2]), Integer.parseInt(tulosrivintiedot[3])));
  76. }
  77. catch(ParseException e) {
  78.  
  79. }
  80. }
  81. }
  82. catch(FileNotFoundException e) {
  83. System.err.println("Tiedostoa ei löydy");
  84. }
  85.  
  86. this.trimmaaTulosrivit();
  87. }
  88.  
  89. private void trimmaaTulosrivit() {
  90. Collections.sort(this.tulosrivit, Collections.reverseOrder());
  91. while (this.tulosrivit.size() > this.koko) {
  92. this.tulosrivit.remove(this.tulosrivit.size()-1);
  93. }
  94. }
  95.  
  96. /**
  97. * Palauttaa iteraattorin, jolla voi k‰yd‰ l‰pi tulostaulukon rivit.
  98. *
  99. * @see java.lang.Iterable#iterator()
  100. */
  101. public Iterator<Tulosrivi> iterator() {
  102. return this.tulosrivit.iterator();
  103. }
  104.  
  105. /**
  106. * Lis‰‰ tulostaulukkoon uuden rivin, mik‰li rivin kuvaama tulos on
  107. * riitt‰v‰n hyv‰.
  108. *
  109. * @param rivi
  110. * jokin tulosrivi.
  111. * @return sijan, jolle uusi rivi sijoitettiin, tai -1, mik‰li tulos ei
  112. * ollut tarpeeksi hyv‰.
  113. */
  114. public int lisaaRivi(Tulosrivi rivi) {
  115. this.tulosrivit.add(rivi);
  116. this.trimmaaTulosrivit();
  117. return this.tulosrivit.indexOf(rivi);
  118. }
  119.  
  120. /**
  121. * Tallentaa rivit konstruktorin parametrina annettuun tiedostoon.
  122. *
  123. * @return true, jos kirjoittaminen onnistuu, muutoin false.
  124. */
  125. public boolean tallennaRivitTiedostoon() {
  126. boolean palautus =false;
  127.  
  128. BufferedWriter kirjoittaja = null;
  129.  
  130. try{
  131. kirjoittaja = new BufferedWriter(new FileWriter(tiedosto));
  132. for(int i=0; i<tulosrivit.size(); i++) {
  133. kirjoittaja.write(tulosrivit.get(i).toString());
  134. kirjoittaja.newLine();
  135.  
  136. }
  137. }
  138. catch (FileNotFoundException e) {
  139. palautus = false;
  140.  
  141. }
  142. catch (IOException e) {
  143. palautus = false;
  144. }
  145.  
  146. finally {
  147.  
  148. try {
  149. //Tyhjentää bufferin ja sulkee tiedoston ?
  150. kirjoittaja.flush();
  151. kirjoittaja.close();
  152. }
  153. catch(IOException e) {
  154. palautus = false;
  155. }
  156. }
  157.  
  158.  
  159. return palautus;
  160.  
  161. }
  162.  
  163. }
Add Comment
Please, Sign In to add comment