美文网首页
Java IO学习笔记(结合了他人的博客)

Java IO学习笔记(结合了他人的博客)

作者: 大雄阿 | 来源:发表于2019-02-17 16:08 被阅读0次

    Java中使用IO(输入输出)来读取和写入,读写设备上的数据、硬盘文件、内存键盘。根据数据的走向分为输入流和输出流,这个走向以内存为基准,往内存中读取为输入流,从内存中读出为输出流。

    Java IO可以分为两类,字节流操作类(inputstream/outputstream)和字符流操作类(reader/writer)

    字节流以8位作为一个数据单元(1byte,8bit)

    字符流以16位作为一个数据单元(2byte,16bit)

    1.字节流可以处理所有数据类型的数据,在java中以Stream结尾。

    2.字符流处理文本数据,在java中以Reader和Writer结尾,由于一个汉字占两个字节,所以产生了字符流

    常用流类:

    以上四个基类提供的部分通用的读和写方法如下:

    int read()-返回的是单个字节数据(字节数据可以直接专程int类型)

    int read(byte[] buf)-返回的是读取到的字节数,真正的数据保存在buf中

    void write(int c)- c既可以是政府,也可以是字节

    void write(byte[] buf  或者 char[] buf)

    void  write(String str) - Writer专用



    基于字节流的操作

    基于字符流的操作

    基于字符流的操作

    代码转自:https://www.cnblogs.com/dreamyu/p/6551137.html

    1.对文件的操作(创建文件,查看文件)

    //创建一个文件路径

    File file = newFile("D:\\testData.txt");

    if(file.exists()){

    //得到文件路径

    System.out.println(file.getAbsolutePath());

    //得到文件大小

    System.out.println("文件大小:"+file.length());

    }

    //创建文件和创建文件夹

    File file1 = newFile("d:\\iotest.txt");

    if(!file1.exists())

    {

        try{

            file1.createNewFile();

        } catch(IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }else{

        System.out.println("文件已存在");

    }

    //创建文件夹

    File file2 = newFile("d:\\testIO");

    if(file2.isDirectory())

    {

        System.out.println("文件夹存在");

    }else{

        file2.mkdir();

    }

    //列出一个文件夹下的所有文件

    File f = newFile("d:\\testIO");

    if(f.isDirectory())

    {

        File lists[] = f.listFiles();

        for(inti=0;i<lists.length;i++)

        {

            System.out.println(lists[i].getName());

        }

    }

    常用字节流FileInputStream和FileOutputStream

    FileInputStream:(从文件中读取内容到控制台与Reader对应)

    FileInputStream fis = null;

            try{

                fis = newFileInputStream("D:\\testData.txt");

                bytebytes[]=newbyte[1024];

                intn=0;

                while((n=fis.read(bytes))!= -1){

                    String str = newString(bytes,0,n);

                    System.out.print(str);

                }

            } catch(Exception e) {

                e.printStackTrace();

            } finally{

                try{

                    fis.close();

                } catch(IOException e) {

                    e.printStackTrace();

                }

            }


    FileOutputStream:(向文件写内容相当于Writer)

    FileOutputStream fos = null;

            try{

                fos = newFileOutputStream("D:\\testData.txt");

                //倘若是续写文件加一个true参数 fos = newFileOutputStream("D:\\testData.txt",ture);

                String str = "报效国家,舍生忘死";

                bytebytes[] = str.getBytes();

                fos.write(bytes);

            } catch(Exception e) {

                e.printStackTrace();    

            } finally{

                try{

                    fos.close();

                } catch(Exception e2) {

                    e2.printStackTrace();

                }

            }


    字符流FileReader和FileWriter:

    //字符流

            //文件写出  输入流

            FileReader freader = null;

            //写入到文件  输出流

            FileWriter fwriter = null;

            try{  

                //创建输入对象

                freader = newFileReader("d:\\testData.txt");

                //创建输出对象

                File f1 = newFile("e:\\testData.txt");

                if(!f1.exists()){

                    f1.createNewFile();

                }

                fwriter = newFileWriter(f1);

                //读入到内存

                charchars[] = newchar[1024];

                intn=0;

                while((n=freader.read(chars))!= -1)

                {

                    fwriter.write(chars);

                    //System.out.println(chars);

                }

            } catch(Exception e) {

                e.printStackTrace();

                // TODO: handle exception

            }finally{

                try{

                freader.close();

                fwriter.close();

                }catch(Exception e){

                    e.printStackTrace();

                }

            }


    下面介绍一下其他流:

    字符串流:StringReader/StringWriter

    这两个操作的是专门操作String字符串的流,其中StringReader能从String中方便地读取数据并保存到char数组,而StringWriter则将字符串类型的数据写入到StringBuffer中(因为String不可写)。


    转换流:InputStreamReader/OutputStreamReader

    这两个类可以将字节流转换成字符流,被称为字节流与字符流之间的桥梁。我们经常在读取键盘输入(System.in)或网络通信的时候,需要使用这两个类


    缓冲流:

    BufferedReader/BufferedWriter       BufferedInputStream/BufferedOutputStream

    没有经过Buffer(缓冲区)处理的IO,每一次读写窦卉由OS底层直接处理,导致效率低下。

    经过Buffered处理过的输入流将会从一个buffer内存区域读取数据,本地API只在buffer空了后才会被调用。

    经过Buffered处理过的输出流将会把书库写入到buffer中,本地API只会在buffer满了后才会被调用。

    BufferedReader/BufferedWriter可以将字符流(Reader)包装成缓冲流,这是最常见用的做法。

    BufferedReader提供一个readLine()可以方便地读取一行,而FileInputStream和FileReader只能读取一个字节或者一个字符。

     //缓冲字符流  BufferedReader  BufferedWriter

            BufferedReader bfreader = null;

            try{

                FileReader freader = newFileReader("d:\\testData.txt");

                bfreader = newBufferedReader(freader);//将字符流包装成缓冲流

                //循环读取

                String s ="";

                while((s=bfreader.readLine())!= null)

                {

                    System.out.println(s);

                }

            } catch(Exception e) {

                // TODO: handle exception

            }

    部分转自:https://www.cnblogs.com/fysola/p/6123947.html

    相关文章

      网友评论

          本文标题:Java IO学习笔记(结合了他人的博客)

          本文链接:https://www.haomeiwen.com/subject/kjwieqtx.html