看完了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应该再
由InputStreamReader到BufferedReader.
图一:基本结构
代码实现:
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();
至此,我们的添加书就完成了!
函数编写总结