黑马程序员—字节流Stream和缓冲流Buffered的小练习

本文介绍如何使用Java进行文件读写操作,包括不同方式读取文本文件内容及复制图片和MP3文件的具体实现。提供了多种文件读取示例,如使用字节数组输出数据、逐字符输出及利用缓冲流复制多媒体文件。

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

---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

我自己对读取文件并输出方法的总结:

我把各种方法写在了下面的一个程序中

 

public class ReadFile

{

 

    public static void main(String[] args)throws IOException

    {

        //writeFile();

        //readFile_1();

        //readFile_2();

        readFile_3();

    }

   

    //使用FileIputStream读文本,并用字节数组输出数据

    public static void readFile_1()throws IOException

    {

        FileInputStream fis = new FileInputStream("test.txt");

       

        byte[] buf = new byte[1024];

       

        int len = 0;

       

        while((len = fis.read(buf))!=-1)

        {

            System.out.println(new String(buf,0,len));

        }

       

        fis.close();

    }

   

    //使用FileIputStream读文件,一个字符一个字符的输出

    public static void readFile_2()throws IOException

    {

        FileInputStream fis = new FileInputStream("test.txt");

       

        int len = 0;

       

        while((len = fis.read())!=-1)

        {

            System.out.println((char)len);

        }

       

        fis.close();

    }

   

    //使用FileIputStream的available()方法获取文本的大小

    public static void readFile_3()throws IOException

    {

        FileInputStream fis = new FileInputStream("test.txt");

       

        int num = fis.available();

       

        byte[] buf = new byte[num];//定义一个刚刚好的字节缓冲区,不需要用循环了

       

        fis.read(buf);

       

        System.out.println(new String(buf));

       

        System.out.println(num);

       

        fis.close();

    }

   

    //使用FileIputStream创建并把数据写入文件

    public static void writeFile()throws IOException

    {

        FileOutputStream fos = new FileOutputStream("test.txt");

       

        fos.write("uvwxyz".getBytes());

       

        fos.close();

    }

 

}

 

 

 

 

 

复制一个图片

 思路:

 1、用字节读取流对象和图片关联

 2、用字节写入流对象创建一个图片文件,用于存储获取到的图片数据

 3、通过循环读写,完成数据的存储

 4、关闭资源

public class CopyImg

{

    public static void main(String[] args)

    {

       //创建文件输入字节流fis

       FileInputStream fis = null;

      

       //创建文件读取字节流fos

       FileOutputStream fos = null;

      

       try

       {

           //把图片加载到输入流中

           fis = new FileInputStream("刘少康.jpg");

          

           //创建目的文件

           fos = new FileOutputStream("lsk.jpg");

          

           //创建字节数组

           byte[] buf = new byte[1024];

          

           int len = 0;

          

           //循环把源文件数据写入目的文件中

           while((len = fis.read(buf))!=-1)

           {

              fos.write(buf,0,len);

           }  

       }

       catch(IOException e)

       {

           //异常处理

           System.out.println("复制失败!");

       }

       finally

       {

           //整个finally都是在关流

           if(fis!=null)

              try

              {

                  if(fis!=null)

                     fis.close(); 

              }

              catch(IOException e)

              {

                  throw new RuntimeException(e.toString());

              }

          

              try

              {

                  if(fos!=null)

                     fos.close();

              }

              catch(IOException e)

              {

                  throw new RuntimeException(e.toString());

              }

       }

    }

 

}

 

 

演示MP3的复制,通过缓冲区

 

  bufferedOutputStream

  bufferedInputStream

 

代码如下:

 

public class CopyMP3

{

         public static void main(String[] args)throws IOException

         {

                   //创建输入缓冲流,把文件读取进来

                   BufferedInputStream bis = new BufferedInputStream(new FileInputStream("1.mp3"));

                  

                   //创建输出缓冲流,用来向流中写入数据

                   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("2.mp3"));

                  

                   int len = 0;

                  

                   //循环把源mp3写入目的mp3

                   while((len = bis.read())!=-1)

                   {

                            bos.write(len);

                   }

                   bis.close();

                   bos.close();

         }

 

}

 

 

 

 

 

 

鉴于把这些都写在一个博客中不便于以后用到时翻看,所以把这些小练习分开来写。

 

 

---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值