Java基础之集合框架——在文件中存储地图(TryPhoneBook2)
控制台程序。
import java.io.*;
public class Person implements Comparable<Person>, Serializable {
// Constructor
public Person(String firstName, String surname) {
this.firstName = firstName;
this.surname = surname;
}
// Read a person from the keyboard
public static Person readPerson() {
String firstName = null;
String surname = null;
try {
System.out.print("Enter first name: ");
firstName = keyboard.readLine().trim();
System.out.print("Enter surname: ");
surname = keyboard.readLine().trim();
} catch(IOException e) {
System.err.println("Error reading a name.");
e.printStackTrace();
System.exit(1);
}
return new Person(firstName,surname);
}
@Override
public boolean equals(Object person) {
return compareTo((Person)person) == 0;
}
@Override
public int hashCode() {
return 7*firstName.hashCode()+13*surname.hashCode();
}
@Override
public String toString() {
return firstName + " " + surname;
}
// Compare Person objects
public int compareTo(Person person) {
int result = surname.compareTo(person.surname);
return result == 0 ? firstName.compareTo(person.firstName) : result;
}
private String firstName; // First name of person
private String surname; // Second name of person
private static final long serialVersionUID = 1001L;
private static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
}
import java.io.*;
class PhoneNumber implements Serializable {
public PhoneNumber(String areacode, String number) {
this.areacode = areacode;
this.number = number;
}
// Read a phone number from the keyboard
public static PhoneNumber readNumber() {
String area = null; // Stores the area code
String localcode = null; // Stores the local code
try {
System.out.print("Enter area code: ");
area = keyboard.readLine().trim();
System.out.print("Enter local code: ");
localcode = keyboard.readLine().trim();
System.out.print("Enter the number: ");
localcode += " " + keyboard.readLine().trim();
} catch(IOException e) {
System.err.println("Error reading a phone number.");
e.printStackTrace();
System.exit(1);
}
return new PhoneNumber(area,localcode);
}
@Override
public String toString() {
return areacode + " " + number;
}
private String areacode;
private String number;
private static final long serialVersionUID = 1001L;
private static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
}
import java.io.Serializable;
class BookEntry implements Comparable<BookEntry>, Serializable {
public int compareTo(BookEntry entry) {
return person.compareTo(entry.getPerson());
}
public BookEntry(Person person, PhoneNumber number) {
this.person = person;
this.number = number;
}
public Person getPerson() {
return person;
}
public PhoneNumber getNumber() {
return number;
}
@Override
public String toString() {
return person.toString() + '\n' + number.toString();
}
// Read an entry from the keyboard
public static BookEntry readEntry() {
return new BookEntry(Person.readPerson(), PhoneNumber.readNumber());
}
private Person person;
private PhoneNumber number;
private static final long serialVersionUID = 1001L;
}
import java.nio.file.*;
import java.io.*;
import java.util.*; class PhoneBook implements Serializable {
// List all entries in the book
public void listEntries() {
// Get the entries as a linked list
LinkedList<BookEntry> entries = new LinkedList<>(phonebook.values());
Collections.sort(entries); // Sort the entries for(BookEntry entry : entries) {
System.out.println(entry);
}
}
@SuppressWarnings("unchecked")
public PhoneBook() {
if(Files.exists(file)) { // If there's a phone book in a file...
try (ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(Files.newInputStream(file)))){
phonebook = (HashMap<Person, BookEntry>)in.readObject(); //...read it in.
} catch(ClassNotFoundException| IOException e) {
e.printStackTrace();
System.exit(1);
}
}
} public void save() {
try {
Files.createDirectories(file.getParent()); // Make sure we have the directory
} catch (IOException e) {
System.err.println("I/O error creating directory. " + e.getMessage());
e.printStackTrace();
System.exit(1);
}
try (ObjectOutputStream out = new ObjectOutputStream(
new BufferedOutputStream(Files.newOutputStream(file)))){
System.out.println("Saving phone book");
out.writeObject(phonebook);
System.out.println("Done");
} catch(IOException e) {
System.out.println("I/O error saving phone book. " + e.getMessage());
e.printStackTrace();
System.exit(1);
}
} public void addEntry(BookEntry entry) {
phonebook.put(entry.getPerson(), entry);
} public BookEntry getEntry(Person key) {
return phonebook.get(key);
} public PhoneNumber getNumber(Person key) {
BookEntry entry = getEntry(key);
if(entry != null) {
return entry.getNumber();
} else {
return null;
}
} private HashMap<Person,BookEntry> phonebook = new HashMap<>();
private static final long serialVersionUID = 1001L;
private Path file = Paths.get(System.getProperty("user.home")).resolve("Beginning Java Struff").resolve("Phonebook.bin");
}
import java.io.StreamTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException; public class FormattedInput { public int readInt() throws InvalidUserInputException {
if (readToken() != StreamTokenizer.TT_NUMBER) {
throw new InvalidUserInputException("readInt() failed." + "Input data not numeric");
} if (tokenizer.nval > (double) Integer.MAX_VALUE || tokenizer.nval < (double) Integer.MIN_VALUE) {
throw new InvalidUserInputException("readInt() failed." + "Input outside range of type int");
} if (tokenizer.nval != (double) (int) tokenizer.nval) {
throw new InvalidUserInputException("readInt() failed." + "Input not an integer");
}
return (int) tokenizer.nval;
} public double readDouble() throws InvalidUserInputException {
if (readToken() != StreamTokenizer.TT_NUMBER) {
throw new InvalidUserInputException("readDouble() failed." + "Input data not numeric");
}
return tokenizer.nval;
} public String readString() throws InvalidUserInputException {
if (readToken() == StreamTokenizer.TT_WORD || ttype == '\"' || ttype == '\"') {
return tokenizer.sval;
} else {
throw new InvalidUserInputException("readString() failed." + "Input data is not a string");
}
}
// Plus methods to read various other data types... // Helper method to read the next token
private int readToken() {
try {
ttype = tokenizer.nextToken();
return ttype; } catch (IOException e) { // Error reading in nextToken()
e.printStackTrace();
System.exit(1); // End the program
}
return 0;
} // Object to tokenize input from the standard input stream
private StreamTokenizer tokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
private int ttype; // Stores the token type code
}
public class InvalidUserInputException extends Exception {
public InvalidUserInputException() { }
public InvalidUserInputException(String message) {
super(message);
}
private static final long serialVersionUID = 9876L;
}
public class TryPhoneBook2 {
public static void main(String[] args) {
PhoneBook book = new PhoneBook(); // The phone book
FormattedInput in = new FormattedInput(); // Keyboard input
Person someone;
while(true) {
System.out.println("Enter 1 to enter a new phone book entry\n"+
"Enter 2 to find the number for a name\n"+
"Enter 3 to list all the entries\n" +
"Enter 9 to quit.");
int what = 0; // Stores input selection
try {
what = in.readInt();
} catch(InvalidUserInputException e) {
System.out.println(e.getMessage()+"\nTry again.");
continue;
}
switch(what) {
case 1:
book.addEntry(BookEntry.readEntry());
break;
case 2:
someone = Person.readPerson();
BookEntry entry = book.getEntry(someone);
if(entry == null) {
System.out.println("The number for " + someone + " was not found.");
} else {
System.out.println("The number for " + someone + " is " + entry.getNumber());
}
break;
case 3:
book.listEntries();
break;
case 9:
book.save();
System.out.println("Ending program.");
return;
default:
System.out.println("Invalid selection, try again.");
break;
}
}
}
}
Java基础之集合框架——在文件中存储地图(TryPhoneBook2)的更多相关文章
- Java基础--说集合框架
版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...
- 黑马程序员——【Java基础】——集合框架
---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
- Thinking in java基础之集合框架(转载)
集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ...
- Java基础之集合框架(Collection接口和List接口)
首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关 ...
- java基础之集合框架
6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ...
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...
- Java导出List集合到txt文件中——(四)
有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. package Action.txt; import java.io.BufferedWriter; ...
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)
控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...
随机推荐
- Note: RewriteCond规则
如果文件存在,就直接访问文件,不进行下面的RewriteRule:RewriteCond %{REQUEST_FILENAME} !-f 如果目录存在,就直接访问目录,不进行下面的RewriteRul ...
- PhpStorm中文教程
PhpStorm中文教程 | 浏览:15972 | 更新:2014-06-10 21:14 1 2 3 4 5 分步阅读 PhpStorm是一款强大的IDE,非常适合于PHP开发人员及前端工程师.提供 ...
- PHP正则表达式及实例
PHP正则表达式及实例 博客分类: Php / Pear / Mysql / Node.js 正则表达式PHPWordPressFPApache 关联: 正则表达式 去除连续空白 + 获取url + ...
- Jquery--array
--遍历数组 $.each(Array, function(i, value) { this; //this指向当前元素 i; //i表示Array当前下标 value; //value表示Array ...
- Bigtable: A Distributed Storage System for Structured Data
https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf Abstr ...
- (转)Linux下安装Matlab2014及破解
原文链接:http://blog.csdn.net/lanbing510/article/details/41698285 文章已搬家至http://lanbing510.info/2014/12/0 ...
- [daily][network] NAT原理(转)
写在转发之前: 一直以来,我一直有一个疑惑,SNAT的时候,如果两个内网主机恰巧使用了相同的源端口号该怎么办呢? 我自己猜测的方法是改掉一个端口号,把端口一起映射(当然还有另一个设想,就是把包同时广播 ...
- php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;
Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...
- node.js使用util实现简单继承
/** * Created by zzq on 2015/5/15. */ var util = require('util'); var Person = function(){ var myD=' ...
- ASP.NET MVC4中用 BundleCollection使用问题手记
ASP.NET MVC4中对JS和CSS的引用又做了一次变化,在MVC3中我们这样引用资源文件: <link href="@Url.Content("~/Content/Si ...