Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
198 views
in Technique[技术] by (71.8m points)

java - Address book that reads and write from a data file

I'm doing a small program an addressbook that allows the user to: add contact, search contact and delete contact. All of this data is read and written to .dat file.

Also, how would you create a layout in the data file, (i.e. name, lastname, address and number)?
I'm terrible at Java and I need to get this done.

My code:

public interface Inter
{
    //Interface class 
    public void addContact();
    public void deleteContact();
    public void searchContact();
    public void readFile();
}

public class Contact
{
    static String name;
    static String lastName;
    static String address;
    static String number;

    public Contact () { }
}

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader; // reads from dat file
import java.io.FileWriter; // writes from dat file
import java.io.IOException;
import java.io.InputStreamReader; 

public class Phonebook extends Contact implements Inter
{
    public static void main(String[] args)
    {
    } // main

    @Override
    public void deleteContact() { }

    @Override
    public void searchContact() { }

    @Override
    public void addContact() 
    {
        String details = null;
        System.out.println("Enter new contact i.e name:number:lastname ");
        InputStreamReader converter = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(converter);

        try
        {
            details=in.readLine();
            String[] tokens =details.split(":"); // eg david :098:Needham
            name= tokens[0];
            lastName = tokens[1];
            address = tokens[2];
            number = tokens[3];
        }  catch (IOException e1) { }

        FileWriter fw = null; // writes contact info to the dat file
        try 
        {
            fw = new FileWriter("data.dat");
            fw.write(name);
            fw.write(lastName);
            fw.write(address);
            fw.write(number);
         } catch (IOException e) { }
         BufferedWriter bw = new BufferedWriter(fw);
    }

    public void readFile() // reads contacts from dat file
    {
        try
        {
            BufferedReader in = new BufferedReader(new FileReader("data.dat"));
            String str;
            while ((str = in.readLine()) != null) 
            {}
         } catch(Exception ex) { }
     }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Your file format should be a .csv, so it would look like:

name,lastname,address,number,
name,lastname,address,number,
name,lastname,address,number,

I know I shouldn't be posting code for you, but here:

class Contact {
  public String name, lastname, address, number;

  public Contact(String name, String lastname, String address, String number) {
    this.name = name;
    this.lastname = lastname;
    this.address = address;
    this.number = number;
  }

  public boolean equals(Contact c) {
    if(name.equals(c.name) && lastname.equals(c.lastname)
          && address.equals(c.address) && number.equals(c.number))
      return true;
    return false;
  }

  public String toString() {
    return name+","+lastname+","address+","+number+",";
  }
}

public class ContactDriver {
  public ArrayList<Contact> contacts = new ArrayList<Contact>();

  public static void addContact(Contact c) {
    contacts.add(c);
  }

  public static Contact deleteContact(Contact c) {
    return contacts.remove(c);
  }

  public static int searchContact(Contact c) {
    for(int i = 0; i < contacts.size(); i++)
      if(contacts.get(i).equals(c))
        return i;
    return -1;
  }

  public static void readContacts(String file) throws Exception {
    Scanner in = new Scanner(new File(file)).useDelimiter(",");

    while(in.hasNextLine()) {
      addContact(in.next(), in.next(), in.next(), in.next());
    }
  }

  public static void writeContacts(String fileName) {
    FileWriter dest = new FileWriter(fileName);

    for(Contact c : contacts)
      dest.write(c.toString());
  }

  public static void main() {
    readContacts();
    // Do logical stuffs
    writeContacts();
  }
}

That code is untested, so I'll edit anything that has an error.

Have fun learning more Java!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...