字节流(No.2)

本文介绍了Java中数据流的基本概念及使用方法,包括DataInputStream和DataOutputStream的应用,以及如何使用BufferedInputStream和BufferedOutputStream进行高效的数据读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

基础的小知识:

InputStream  OutputStream    字节流的基类(抽象类)

FileInputStream节点流(点对点的意思,例如:FileInputStream fis = new FileInputStream("data.txt");)

FileOutputStream(例如:FileOutputStream fos = new FileOutputStream("result.txt");)

Reader Writer字符流的基类

File帮助输入输出更轻松(类似支撑类)

RandomAccess特点:随机性

 

一、DataInputStream和DataOutputStream

例子:张三  1元 ,李四  2元  王五  5.5元

如果用InputStream的话要把这些数据读出文件中时,要把张三,李四,王五(字符串);1,2(整型);5.5(浮点型)全部转换成字节存入其中。但是写入的时候将会很复杂,要分清哪些字节是字符串,哪些是整型,哪些是浮点型,然后做相应的转换,然后存入数据。

这个例子用DataOutputStream和DataInputStream来做:

        String name[] = {"Tom","Jack","Mary"};

        double salary[] = {250,265.7,300.6};

        FileOutputStream fos = new FileOutputStream("res/salary");

        DataOutputStream dos = new DataOutputStream(fos);

        for(int i=0;i<name.length;i++){

           dos.writeUTF(name[i]);

            dos.writeDouble(salary[i]);

        }

        fos.close();

        dos.close();

        //===================================

        FileInputStream fis = new FileInputStream("res/salary");

        DataInputStream dis = new DataInputStream(fis);

        for (int i=0;i<name.length;i++){

           System.out.println(dis.readUTF()+" : "+dis.readDouble());

        }

        fis.close();

        dis.close();

  

二、字节缓冲流

BufferedInputStream和BufferedOutputStream的简单运用

        FileOutputStream fos = new FileOutputStream("res/new.txt");//最底层的字节流

        BufferedOutputStream bos = new BufferedOutputStream(fos);//封装,缓存输出流

        DataOutputStream dos = new DataOutputStream(bos);//数据输出流

        dos.writeUTF("good morning!");

        dos.writeInt(250);

        dos.flush();//强制性的发送到文件中去

        dos.close();

        bos.close();

        fos.close();

        FileInputStream fis = new FileInputStream("res/new.txt");

        BufferedInputStream bis = new BufferedInputStream(fis);

        DataInputStream dis = new DataInputStream(bis);

        System.out.println(dis.readUTF() + "\n"+ dis.readInt());

        dis.close();

        bis.close();

        fis.close();

注意:1、在这个小程序中dos.close();bos.close();fos.close();不能写反了{fos.close();bos.close();dos.close();这种是错误的}

      2、如果数据不能够流动,可以用dos.flush();来强制性的让它流动。

3、File

Source.txt

Backup/source.txt

执行备份:

判断备份目录是否存在,

如无:

1、         建立目录backup

2、         将源文件复制到backup

如有:

判断是否需要备份  

 如有必要:

将源文件复制到backup

今天有些小感想,首先对于今天的留下的作业,就是做一个java记事本并且实现保存的功能,记事本做好了,但是这个保存的功能却总也实现不了,心里有一个大概的思路,可是对于知识的认识和运用总是有些欠缺,再加上对于今天老师讲的内容的不理解造成了这般结果,或许是我缺少人们常说的一种天赋,有些人生下来就是做程序员的料,也许我就是不适合的那一批中的。不过还是有些收获的,在网上查了查资料,东拼西凑,再加上自己的那点理解,终于还是完成了这个项目:

public class JiShiTxt implements ActionListener{

   Frame f;

   MenuBar menubar = new MenuBar();

   Menu wenjian;

   MenuItem baocun;

   TextArea wenben = new TextArea();

   FileDialog fd;//创建一个文件对话框,用于加载文件

   File file1 = null;//创建一个实例

   public JiShiTxt(){

     f = new Frame("data");

     wenjian = new Menu("文件");

     baocun = new MenuItem("保存");

     baocun.addActionListener(this);

     f.setMenuBar(menubar);

     menubar.add(wenjian);

     wenjian.add(baocun);

     f.add(wenben);

     f.setSize(600, 480);

     f.setLocation(200, 200);

     f.setVisible(true);

     f.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent e) {

          System.exit(0);

        }

     });

   }

   public static void main(String[] args) {

     new JiShiTxt();

   }

   public void actionPerformed(ActionEvent e) {

     if (e.getSource() == baocun) {

        fd = new FileDialog(f, "Save", FileDialog.SAVE);

        fd.setVisible(true);

        file1 = new File(fd.getDirectory(), fd.getFile());

        save(file1);

     }

   }

   public void save(File file1){

     try {

        FileWriter fw = new FileWriter(file1);

        fw.write(wenben.getText());

        fw.close();

           } catch (Exception e) {

     }

   }

}

在这段代码中,有我理解的,也有我不理解的,通过查资料我解释了某些代码的意思。虽然收获很少,但是我自己清楚,我尽力了,尽管没有达到预期的结果,我会继续攻克它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值