I/O流的应用

ifile类的作用:

File类对象可封装要操作的文件,可通过File类的对象对文件进行操作,如查看文件的大小、判断文件是否隐藏、判断文件是否可读等。
局限:File类的相关操作,并不涉及文件内容相关的操作,这是单独依靠File类对象无法实现的操作,此时需要借助I/O流完成。

I/O流可以类比成输入输出的两个管子

分类:

方向:输入流,输出流

处理单元:字节流,字符流

功能:节点流,处理流

输入字符流:


//读取文件内容
public class Test {
    public static void main(String[] args) throws IOException {
        //将文件封装为file类的对象
        File f = new File("d:\\test.txt");
        //管子=流=输入字符流 将管子加到文件上
        FileReader fr = new FileReader(f);
        //开始读取
        int n = fr.read();
        while (n != -1) {
            System.out.println(n);
            n = fr.read();
        }
        //流关闭操作
        fr.close();
    }
}

i输出字符流

//将程序中的内容输出到文件中去
public class test1 {
    public static void main(String[] args) throws IOException {
        //程序的字符串
        String str = "abc你好";
        //文件
        File f = new File("d://demo.text");
        //字符输出流
        FileWriter fw = new FileWriter(f);
        //输出
        fw.write(str);
        //流关闭
        fw.close();
    }
}

I/O流应用

​
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        while (true) {
            System.out.println("欢迎来到小王书城");
            System.out.println("1.展示书籍");
            System.out.println("2.上新书籍");
            System.out.println("3.下架书籍");
            System.out.println("4.退出应用");
            //借助Scanner类:
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你想要的功能序号");
            //利用键盘录入序号:
            int choice = sc.nextInt();//键盘录入必须回车才能录入
            //根据choice录入进行判断

            if (choice == 1) {
                System.out.println("小王书城>>>>1.展示书籍");
                //从文件中读取list
                File f = new File("d://demo.txt");
                //对f判断
                if (f.exists() == true) {
                    //流
                    FileInputStream fis = new FileInputStream(f);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    //将集合读取
                    ArrayList list = (ArrayList) (ois.readObject());//从文件中读取的集合
                    //对集合遍历查看
                    for (int i = 0; i < list.size(); i++) {
                        Book b = (Book) (list.get(i));
                        System.out.println(b.getbNo() + "-" + b.getbName() + "-" + b.getbAuthor());
                    }
                } else {
                    System.out.println("请上新书籍");
                }
            }

            if (choice == 2) {
                System.out.println("小王书城>>>>2.上新书籍");
                //请输入书籍编号
                System.out.println("请输入书籍编号");
                int bNo = sc.nextInt();
                System.out.println("请输入书籍名字");
                String bName = sc.next();
                System.out.println("请输入书籍作者");
                String bAuthor = sc.next();
                //每上新一本书籍,就要创建一个对象
                Book b = new Book();
                b.setbNo(bNo);
                b.setbName(bName);
                b.setbAuthor(bAuthor);


                //从文件中读取list
                File f = new File("d://demo.txt");
                //对f判断
                if (f.exists() == true) {//证明集合中有书籍
                    //流
                    FileInputStream fis = new FileInputStream(f);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    //将集合读取
                    ArrayList list = (ArrayList) (ois.readObject());//从文件中读取的集合
                    //对集合读取,并追加新的书籍
                    list.add(b);
                    //将集合写出去
                    //需要流
                    FileOutputStream fos = new FileOutputStream(f);
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    //将list写出
                    oos.writeObject(list);
                    //关闭流
                    oos.close();

                } else {
                    //用集合存放相同个体,书籍对象list放在循环外面
                    ArrayList list = new ArrayList();//空集合
                    list.add(b);//添加个体到集合中去
                    //需要流
                    FileOutputStream fos = new FileOutputStream(f);
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    //将list写出
                    oos.writeObject(list);
                    //关闭流
                    oos.close();
                }
            }

            if (choice == 3) {
                System.out.println("小王书城>>>>3.下架书籍");
//            //录入你要下载书籍编号
//            System.out.println("请输入你要下架的书籍编号");
//            int delNo = sc.nextInt();
//            //下架该书籍
//            for(int i = 0; i < list.size() ; i++){
//                Book b = (Book)(list.get(i));
//               if(b.getbNo() == delNo){//遍历书籍编号与录入书籍号一致,则移除
//                   list.remove(b);
//                   System.out.println("书籍下架成功");
//                   break;//下架停止
//               }
//            }
            }

            if (choice == 4) {
                System.out.println("小王书城>>>>4.退出应用");
                break;//退出
            }
        }
    }
}

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值