您的位置:首页 > 职场人生

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

2014-01-24 14:53 267 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"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.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息