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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,089评论 2 95
  • I/O的学习之字节流 今天的主要内容 File类的使用File类概述和构造方法File类的创建功能File类的重命...
    须臾之北阅读 430评论 0 0
  • 流就是当不同的介质之间有数据交互的时候,JAVA就使用流来实现。数据源可以是文件,还可以是数据库,网络甚至是其他的...
    从小白到全栈阅读 311评论 0 0
  • 初学Java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结...
    赌书只道是寻常阅读 425评论 1 2
  • 计算(或者说太过计较)会使人焦虑。计算不要等同于算计,但它也有那么点算计的味道。 吃个零食要计算卡路里,与朋友吃饭...
    小小ing阅读 262评论 0 0