Results 1 to 2 of 2

Thread: java IO

  1. #1
    renars1985 is offline Member
    Join Date
    Nov 2007
    Posts
    9
    Rep Power
    0

    Question java IO

    Hi,

    Thanks again to hardwired about this code however one but suppose the last problem of this programm! :)
    Program "resets" file (lost my entered info) afer debug or run. I don`t want to lose info. :)
    Can you help me again?









    import java.io.*;
    import java.util.*;

    public class Gramata3 {
    public static void main(String[] args) {
    String[][] books = {
    // book author year
    { "Head First Java", "Bates and Sierra", "2003" },
    { "Thinking In Java", "Bruce Eckel", "2002" },
    { "Learning Java", "Niemeyer and Knudsen", "2000" },
    { "Developing Java Sortware", "Winder and Roberts", "2000" }
    };
    File file = new File("gramata3.txt");
    try {
    PrintWriter out = new PrintWriter(
    new FileWriter(file));
    for(int j = 0; j < books.length; j++) {
    out.println(books[j][2] + " " + books[j][0] + " by " + books[j][1]);
    }
    out.close();
    } catch(IOException e) {
    System.out.println("write error: " + e.getMessage());
    }

    BufferedReader reader = new BufferedReader(
    new InputStreamReader(System.in));
    try {
    System.out.println("Enter a book, see book list " +
    "or quit? 'e'/'s'/'q'");
    String choice = reader.readLine();
    while(!choice.equalsIgnoreCase("q")) {
    if(choice.equals("e")) {
    System.out.print("Enter name of the book: ");
    String book = reader.readLine();
    System.out.println("enter author");
    String author = reader.readLine();
    System.out.println("enter year");
    String year = reader.readLine();
    PrintWriter out = new PrintWriter(
    new FileWriter(file, true));
    out.println(year + " " + book + " by " + author);
    out.close();
    } else if(choice.equals("s")) {
    System.out.println("sort books by title, author " +
    "or date? 't'/'a'/'d'");
    choice = reader.readLine().toLowerCase();
    int index = choice.equals("t") ? 1 :
    choice.equals("a") ? 2 : 0;
    showBooks(file, index);
    }
    System.out.println("Enter a book see, book list " +
    "or quit? 'e'/'s'/'q'");
    choice = reader.readLine();
    }
    reader.close();
    } catch(IOException e) {
    System.out.println("main I/O error: " + e.getMessage());
    }
    }

    private static void showBooks(File file, int index) {
    List<String> list = new ArrayList<String>();
    try {
    BufferedReader in = new BufferedReader(
    new FileReader(file));
    String line;
    while((line = in.readLine()) != null) {
    list.add(line);
    }
    in.close();
    } catch(IOException e) {
    System.out.println("showBooks I/O error: " + e.getMessage());
    }
    sort(list, index);
    }

    private static void sort(List<String> list, int index) {
    // Parse the lines into the title, author and date data.
    String[][] data = new String[list.size()][];
    for(int j = 0; j < list.size(); j++) {
    String book = (String)list.get(j);
    data[j] = getBookData(book);
    }
    // Sort the books.
    for(int j = 0; j < data.length; j++) {
    String min = data[j][index];
    int minIndex = j;
    for(int k = j+1; k < data.length; k++) {
    int compare = 0;
    switch(index) {
    case 0: // year
    Integer n = Integer.valueOf(min);
    compare = Integer.valueOf(data[k][index]).compareTo(n);
    break;
    case 1: // title
    String s = String.valueOf(min);
    compare = data[k][index].compareTo(s);
    break;
    case 2: // author
    String name = getComparableName(data[k][index]);
    s = getComparableName(min);
    compare = name.compareTo(s);
    }
    if(compare < 0) {
    min = data[k][index];
    minIndex = k;
    }
    }
    if(minIndex != j) {
    // Found lower sort value, swap book elements.
    String[] temp = data[j];
    data[j] = data[minIndex];
    data[minIndex] = temp;
    }
    }
    // Print the sorted array.
    for(int j = 0; j < data.length; j++) {
    String year = data[j][0];
    String title = data[j][1];
    String author = data[j][2];
    System.out.println(year + " " + title + " by " + author);
    }
    System.out.println("------------------");
    }

    private static String[] getBookData(String book) {
    String[] data = new String[3];
    int start = book.indexOf(" ");
    data[0] = book.substring(0, start); // year
    int by = book.indexOf(" by ", start+1);
    data[1] = book.substring(start, by); // title
    data[2] = book.substring(by + 4); // author
    return data;
    }

    private static String getComparableName(String s) {
    boolean hasAnd = s.indexOf(" and ") != -1;
    int last = s.lastIndexOf(" ");
    if(!hasAnd && last != -1) {
    // Put last name first for accurate sorting.
    s = s.substring(last+1) + " " + s.substring(0, last);
    }
    return s;
    }
    }

  2. #2
    dmacvittie is offline Member
    Join Date
    Aug 2007
    Posts
    30
    Rep Power
    0

    Default

    This bit:
    { "Head First Java", "Bates and Sierra", "2003" },
    { "Thinking In Java", "Bruce Eckel", "2002" },
    { "Learning Java", "Niemeyer and Knudsen", "2000" },
    { "Developing Java Sortware", "Winder and Roberts", "2000" }
    };
    File file = new File("gramata3.txt");
    try {
    PrintWriter out = new PrintWriter(
    new FileWriter(file));
    for(int j = 0; j < books.length; j++) {
    out.println(books[j][2] + " " + books[j][0] + " by " + books[j][1]);
    }
    out.close();
    } catch(IOException e) {
    System.out.println("write error: " + e.getMessage());
    }
    Would over-write your file every time. Run the program once, then comment out those lines and run it again. All should go well for you.

    Don.
    Don MacVittie F5 Networks - DevCentral

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •