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

2019-02-17  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读