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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

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