Java实验1-文件IO
目标:掌握Java类的创建,Java I/O操作,Java集合类的使用等
内容:
王老师非常喜欢读书,为了便于查阅,他每次买书回家后就在笔记本上登记每本书的详细信息(书名、作者、出版社、出版日期、价格),采用这种手工记录方式管理,检索书籍非常不方便。请你试着用Java编程,帮助他进行计算机管理。要求如下:
(1) 把每本书的信息存到文件“D:/BookList.txt”中,格式如下:
Java 2大全,Herbert Schildt,电子工业出版社, 2003/01,86
面向对象软件工程,Stephen R.Schach,机械工业出版社,2002/08,56
软件工程,Roger S. Pressman,清华大学出版社,2001/01,42
Design Patterns,Erich Gamma,机械工业出版社,2002/09,98
软件工程,张海藩,人民邮电出版社,2002/07,37
现代软件工程,孙涌,北京希望电子出版社,2002/08,42
面向对象技术UML教程,王少锋,清华大学出版社,2004/02,54
(2) 设计“书”类,包括属性:书名、作者、出版社版号、出版日期、价格;和设置、得到这些属性值的方法,并用Java实现;
(3) 设计“书包”类,包括一个TreeSet属性,代表所有书的集合,和向书包中加书的方法,从书包中拿出书的方法,以及得到所有书价格的方法,并用Java实现;
(4) 设计“图书管理员”类,包括一个“书包”类属性,代表对所有书的管理,和从数据文件“D:/BookList.txt”中读取每本书的信息加入书包中的方法,和在屏幕上打印所有书的信息(格式如下)的main方法,并用Java实现
书名 作者 出版社版号 出版日期 价格
-------------------------------------------------------------
Java 2大全 Herbert Schildt 电子工业出版社 2003/01 86
实现代码清单:Book.java(Book的类模型)SchoolBag.java(书包的类模型)BookManager.java(图书管理员类模型)
代码一:Book.java
public class Book implements Comparable{
private String bookname;
private String author;
private String press;
private String date;
private int price;
public Book (){
}
public Book (String bookname,String author,String press,String date,int price) {
this.bookname = bookname;
this.author = author;
this.press = press;
this.date = date;
this.price = price;
}
public void setBookname (String bookname) {
this.bookname = bookname;
}
public void setAuthor (String author) {
this.author = author;
}
public void setPress (String press) {
this.press = press;
}
public void setDate(String date) {
this.date = date;
}
public void setPrice(int price) {
this.price = price;
}
public String getBookname() {
return bookname;
}
public String getAuthor() {
return author;
}
public String getpress() {
return press;
}
public int getPrice() {
return price;
}
public String toString(){
return bookname+" "+author+" "+press+" "+date+" "+price;
}
public int compareTo(Object o){
Book b = (Book)o;
if((this.bookname.compareTo(b.bookname))>0){
return 1;
}
else if((this.bookname.compareTo(b.bookname))==0){
return 0;
}
else return -1;
}
public static void main(String[] args){
Book myBook= new Book("ff","yy","love you","haha",712);
System.out.println(myBook);
}
}
代码2:BookManager.java
import java.util.*;
public class SchoolBag {
private TreeSet<Book> booklist = new TreeSet<Book>();
public SchoolBag() {
}
public SchoolBag (Book book) {
booklist.add(book);
}
public ArrayList<Integer> getAllPrice(){
ArrayList<Integer> bookprices = new ArrayList<Integer> ();
for(Book element: booklist) {
bookprices.add(element.getPrice());
}
return bookprices;
}
public boolean add(Book book) {
return booklist.add(book);
}
public <E extends TreeSet<Book>> void setBooklist(E treeBook){
this.booklist = treeBook;
} //泛型方法,将泛型放在函数放回类型之前
public TreeSet<Book> getBooklist(){
return booklist;
}
public boolean remove(Book book) {
if(booklist.isEmpty()) {
System.out.println("Warning ,SchoolBag is Empty!");
return false;
}
else{
booklist.remove(book);
return true;
}
}
public static void main(String[] args){
Book mybook = new Book("xx","ff","geg","fege",12);
Book herbook = new Book("ss","ll","hh","rr",712);
//测试构造方法
SchoolBag sb = new SchoolBag(mybook);
//测试add
sb.add(herbook);
System.out.println(sb.booklist);
TreeSet<Book> bl = sb.getBooklist();
System.out.println(bl);
//测试remove
sb.remove(mybook);
System.out.println(bl);
//测试setBooklist
Book hisbook = new Book("hh","ss","nn","gg",464);
Book itsbook = new Book("ff","hh","KK","tt",375);
TreeSet<Book> b2 = new TreeSet<Book>();
b2.add(hisbook);
b2.add(itsbook);
sb.setBooklist(b2);
System.out.println("-----------------------");
System.out.println(sb.booklist);
//测试printAllPrice
ArrayList al = sb.getAllPrice();
System.out.println(al);
}
}
代码3:BookManager.java
import java.util.*;
import java.io.*; public class BookManager {
private SchoolBag schoolBag = new SchoolBag(); public BookManager(){ }
public BookManager(SchoolBag s){ } public void readData() { try {
File data = new File("BookList.txt");
FileReader fr = new FileReader(data);
BufferedReader br = new BufferedReader(fr); String[] content = new String[5];
Book book;
String str;
while((str = br.readLine())!=null){
content = str.trim().split(",|,");
book = new Book();
book.setBookname(content[0].trim());
book.setAuthor(content[1].trim());
book.setPress(content[2].trim());
book.setDate(content[3].trim());
book.setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(book);
}
br.close();
}catch(IOException e) {
e.printStackTrace();
}
} public void print() {
System.out.println("------------------------------------------------------------------------");
System.out.println("书名 作者 出版号 出版日期 价格 ");
System.out.println("------------------------------------------------------------------------");
TreeSet<Book> treeBook = schoolBag.getBooklist();
for(Book book:treeBook){
System.out.println(book.toString());
} } public static void main(String[] args) {
BookManager bm = new BookManager();
bm.readData();
bm.print(); }
}
程序运行后的结果(使用JDK在DOS下运行的控制台界面)

Java实验1-文件IO的更多相关文章
- 3,Java中的文件IO流
1,File类 ··· 概念:File对象可以表示一个文件或目录.可以对其进行增删改查. ··· 常用方法: File f = new File("."); 判断是 ...
- Java学习笔记--文件IO
简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...
- 文件IO操作
前言 本文介绍使用java进行简单的文件IO操作. 操作步骤 - 读文件 1. 定义一个Scanner对象 2. 调用该对象的input函数族进行文件读取 (参见下面代码) 3. 关闭输入流 说明:其 ...
- 使用Java的多线程和IO流写一个文件复制功能类
创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...
- Java文件IO操作应该抛弃File拥抱Paths和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...
- Java 文件IO续
文件IO续 File类 用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...
- Java 文件IO
文件IO Java IO IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 按操作数据分为 字节流和字符流 字符流的 ...
- Java 之文件IO编程 之写入
package com.sun; /* * 操作对文件IO的写 * 2014-08-10 */ import java.io.*; public class File_Write { public s ...
- Java 之文件IO编程 之读取
package com.sun; /* * 这里是对文件IO流读取的操作 * 2014-08-10 */ import java.io.*; public class File_test { publ ...
随机推荐
- NOIP2014
DAY1 生活大爆炸版石头剪刀布 直接模拟即可. // codevs3716 #include<algorithm> #include<iostream> #include&l ...
- VS2012使用NUGet自动下载(还原)项目中使用的包
一: 当签出完整项目后,在解决方案名称上点右键,选择"启用NuGet程序包还原". 二: 出现询问,当然要点是,当完成后,会发现在解决方案中,多出".nuget" ...
- 与number_format函数有关的一个bug?
最近在做一个模仿excel功能的在线项目.其中有一个功能,数据列表中的数据,到了最后一列都要进行总计.这本来没什么难度.直接从数据库取出数据后,进行foreach相加就行 了.这是如此的简单,以至于用 ...
- 通过Nginx,Tomcat访问日志(access log)记录请求耗时
一.Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remo ...
- re正则表达式6_+
+ means"match one or more" the group proceding a plus must appear at least once. # -*- cod ...
- 使用RawSocket进行网络抓包
aw socket,即原始套接字,可以接收本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的,一共可以有3种方式创建这种socket. 中文名 原始套接字 外文名 RAW SOCKET ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- HTML 通知公告练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ecshop后台,listtable.js使用
1.先载入listtable.js 2.html代码 a. <a href="javascript:listTable.sort('goods_number'); "> ...
- yourphp的edit,updata,dele
参考文件Yourphp\Lib\Action\User\PostAction.class.php public function add() { $form=new Form(); $form-> ...