JAVA基础(1)--I/O流--基于图书管理系统的使用分析(1)

看完了I/O流的核心知识,我们需要关心的是:

I/O流到底怎么写啊????

【案例一】:在 "D:\\JAVA\\书籍信息.txt" 绝对路径下,有一个书籍信息.txt,里面有一种书的信息,请写一个AddBook 类,实现对文本的改写功能,增加一个新的书种。

前置:

import java.io.*;

import java.util.IOException;  (关于异常处理还有别的情况,下面会再补充)

import java.util.Scanner;  

第一步:

在class AddBook中,写一个addbook(),抛出异常值,即:

public void addbook() throws IOException{}

第二步:(★)

声明File类对象------提示查询重名书种-----输入书名-----建立 "文件输入流"---读取文件输入流内容

我们需要把这个.txt文件从硬盘导入内存,首先需要创建一个File对象,然后建立FileInputStream对象,然后传过来了需要读取啊,即建立BufferedReader对象,这样,源有了,桥梁也有了,读取器也有了。Perfect !(如我画的图一)

因为BufferedReader是InputReader的子类,所以我们新建的FileInputStream对象input应该再

InputStreamReaderBufferedReader.

 

图一:基本结构

代码实现:

File file= new File("D:\\JAVA\\书籍信息.txt");
FileInputStream input= new FileInputStream(file);
BufferedReader reader=new BufferedReader(new InputStreamReader(input));

第二步完成了! 是不是很刺激?

第三步:(★) 比较书籍名称是否相同

【知识点:】 BufferedReader 的reader有readLine()方法,读取一整行的内容,即    reader.readLine()

注意: 我们的read是按行,一行一行来的,所以我们需要多次循环(while),实现一行一行读取完到最后一行.

拿什么和它比较呢?因为涉及循环的内容,所以我们需要集合(列表)

【知识点:】 List<String> list =new ArrayList<>();  这里List是父类,做接口,ArrayList是子类,实现不同功能  。父类为接口,规定使用的方法;子类为各种不同的具体实现,根据实际需求选用不同的实现。ArrayList的对象是String类型的,可以用来和下面的tempString比较

还有: ArrayList是大小可以动态变化的数组,且是有序的

我们考虑的是临时String类变量,即 tempString,把它加到一个集合(列表)ArrayList的对象list的后面,如果

    while((tempString=reader.readLine())!=null) 跳出,那么说明行读取完,即全部写入tempString

    { list.add(tempString);}   

因为reader.readLine()是分行读入的,所以用tempString保存,之后追加到list后面

我们知道列表肯定不能与bookName(string)能进行什么,我们需要另一个String[] book_ name,

做到与bookname的元素比较,

String[] book_name = new String[8]

然后遍历for(string user: list),把含","分隔的文本写入book_name

之后书名比较, if(bookName.equals(book_name[0]),

那么把之前的boolean  flag=false改成true

判断名称后,当flag为false时,可以添加书籍

即:if(flag=false){

System.out.println("请输入作者:");

String author =sc.next();

System.out.println("请输入书籍价格:");

price = sc.nextDouble();

System.out.println("请输入书籍类型:");

String category = sc.next();

            System.out.println("请输入书籍的出版社:");

            String press = sc.next();

            String state = "false";

            String borrowName = "无";

            String borrowTime = "null";

创建书,那必定要new (这是个很重要的思想)

Book book = new Book (bookName, author, price, category, press, state, borrowName, borrowTime);   //构造

最最关键的地方来了!我们怎么把这个内容新写入一个文件?我们的书籍 ext.

先用file的.creatNewFile()方法,然后建立Filewriter类的fw,后面new的格式为new FileWriter(file, true);注意这里的(file,true)是一种重载方式,使得内容不会覆盖之前而追加至后面,而这还

没真正实现,还要用file的write方法去拼接String,即fw.write(book.toString());后面有每段换行的要求,fw.write(System.getProperty("line.separator"));//在段落后添加一个换行符

只有当流关闭后,我们的文本才会写入你文本,所以 fw.close();

至此,我们的添加书就完成了!

函数编写总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值