欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员 IO流学习笔记三,io学习笔记

来源: javaer 分享于  点击 9471 次 点评:230

黑马程序员 IO流学习笔记三,io学习笔记


----------android培训、java培训、java学习型技术博客、期待与您交流!----------

 

我们的机器只会读字节码,而我们人却很难读懂字节码,所以人与机器交流过程中需要编码解码。

InputStreamReader及其子类FileReader:(从字节到字符)是个解码过程;

OutputStreamWrite及其子类FileWriter:(从字符到字节)是个编码过程。

InputStreamReader这个解码过程中,最主要的就是StreamDecoder



  1. InputStreamReader的过程要指定编码字符集,否则将采用操作系统默认字符集,很可能会出现乱码问题。(查看JDK中的InputStreamReader类的构造函数,除了第一个构造函数没有制定外,其他几个都需要指定)

  2. 如果看不懂这个图请先看Association,Aggregation and Composition这篇文章。

    字符输入输出流

    FileReader类用于对字符文件的读取,与FileInputStream的功能类似,FileWriter类用于对字符文件的输入,其功能与FileOutputStream相似,对于上例,使用FileReader和FileWriter也能到达相同的目的。但是,FileReader和FileWriter类以字符为单位进行数据的读写操作,传输效率很低。所以,同样的,BufferedReader与BufferedWriter以缓冲流的方式进行数据读写操作,提供每次读取或写入一行数据的高效操作。

    IO与文件结合的一个典型案例

    题目:编写程序拷贝一个文件, 尽量使用效率高的方式

    /* 思路:   考虑到高效,应该使用装饰类,因为题目没有说是字节文件还是字符文件,
     * 所以为了增加通用,采用字节流,这样可以复制文本及MP3等常见文件
     *     (1)对给定的文件封装,判断给定路径或文件是否存在,不存在给出
     *         提示并结束(感觉实际开发中交互应该做的更友好一些)
     *     (2)若文件存在,则获取文件名
     *     (3)判断目标目录是否存在,不存在则建立目标目录
     *     (4)通过目标目录和文件名的封装,创建目标文件
     *     (5)将源文件的数据读取写入目标文件
     *
     * 说明:
     * 程序将异常抛给了JVM
     *resource源目录提供了两个测试文件
     * 程序运行后,将exam工程刷新,可以更好的查看复制结果
    **/
     
    importjava.io.BufferedInputStream;
    importjava.io.BufferedOutputStream;
    importjava.io.File;
    importjava.io.FileInputStream;
    importjava.io.FileOutputStream;
    import java.io.IOException;
    public classCopyFile {
     
             /**
              * @param args
              * @throws IOException
              */
             public static void main(String[] args)throws IOException{
                       // TODO Auto-generated methodstub
                       //给定文件路径
                       String filePath ="resource\\mySoul.mp3";
                       String destDirPath ="destination";
                       copyFile(filePath,destDirPath);
                      
             }
            
             public static void copyFile(StringfilePath, String destDirPath) throws IOException{
                      
                       File resFile = newFile(filePath);
                       if (!resFile.isFile()) {
                                System.out.println("路径错误或源文件不存在");
                                return;
                       }
                      
                       //若文件存在,则获取文件名
                       String fileName =resFile.getName();
                      
                       //给定拷贝文件存储的目录,为了方便测试,这里创建相对路径下的destination目录
                      
                       //封装目标目录
                       File destDir = newFile(destDirPath);
                      
                       //若给定目录不存在,则创建
                       if (!destDir.isDirectory()) {
                                destDir.mkdir();
                       }
                      
                       //为了提高效率,用BufferedInputStream包装FileInputStream
                       BufferedInputStream bisr =new BufferedInputStream(new FileInputStream(resFile));
                       File dsetFile = newFile(destDir,fileName);
                      
                       //为了提高效率,用BufferedOutputStream包装FileOutputStream
                       BufferedOutputStream bosw=new BufferedOutputStream(new FileOutputStream(dsetFile));
                       byte[] bufr = new byte[1024];
                       int len = 0;
                       //按行读取,并按行写入
                       while ((len =bisr.read(bufr))!= -1)
                       {
                                bosw.write(bufr,0,len);
                       }
                      
                       //关闭资源
                       bisr.close();
                       bosw.close();
             }
    }
    

    总结:OutputStreamWrite编码过程中就有另外一个重要的类:StreamEncoder负责编码.


 

 

----------android培训、java培训、java学习型技术博客、期待与您交流!----------

 

相关文章

    暂无相关文章
相关栏目:

用户点评