配色: 字号:
JAVA之旅(二十四)
2016-10-07 | 阅:  转:  |  分享 
  
JAVA之旅(二十四)

一.I/O概述



I/O全名:InputOutput,输入输出的意思

IO流用来处理设备之间的数据传输

JAVA对数据的操作都是通过流的方式

JAVA用于操作流的对象都在IO包里

流操作分两种:字节流,字符流

流按流向分为:输入流,输出流

对数据的操作,其实就是File文件,我们可以去网上偷张图片来描述我们本大系列的所有知识点



图片来自于网络

字节流的抽象积累



InputStream

OutputStream

字符流的抽象基类



Reader

Writer

从图中可以看出,都是从这四个类中派生出来的子类,但是他们的后缀都是这四个

二.FileWriter



我们先从字符流开始,肯定是从子类对象下手,我们对文件操作开始吧!

需求:在硬盘上创建一个文件,并且写入数据

那我们怎么去做?他构造函数比较多的,我们看例子

packagecom.lgl.hellojava;



importjava.io.FileWriter;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){

/

需求:在硬盘上创建一个文件,并且写入数据

/



//一被初始化就必须要有被操作的文件

//如果不指定位置,就创建在同目录下

//如果目录下存在同名文件,覆盖

try{

FileWriterfileWriter=newFileWriter("test.txt");

//写入数据到内存

fileWriter.write("abcde");

//刷新该流的缓冲

//fileWriter.flush();



//关闭流关闭之前会刷新,和flush的区别在于flush刷新后流可以继续工作

fileWriter.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

这样在我们的项目根目录下就可以看到生成的文件了



我用白话再说一遍吧,其实就是创建fileWriter,他没有空构造函数,你创建一个文件,可以传文件名或者路径,然后wirter写数据,这样你是看不到的,你需要刷新,刷新是刷新缓冲区,你现在就可以看到了,抛异常,还有关闭,关闭之前会刷新的,但是这个流就没用了,根据自己的场景来分析

三.IOException、



我们来看看怎么处理IO的异常,IO异常大致有三个,一个是IO异常,一个是找不到文件异常,还有一个就是没有对象异常了,我们比较严谨的写法

packagecom.lgl.hellojava;



importjava.io.FileWriter;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){



FileWriterfileWriter=null;

try{

fileWriter=newFileWriter("demo.txt");

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

try{

if(fileWriter!=null){

fileWriter.close();

}

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

}

四.文件续写



我们知道,文件存在的话就会覆盖,但是我们不想这样,我们想在原有的数据中续写,这该去怎么做?

packagecom.lgl.hellojava;



importjava.io.FileWriter;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){



try{

//参数2代表不覆盖已有的文件,支持续写

FileWriterfileWriter=newFileWriter("demo.txt",true);

fileWriter.write("你好");

fileWriter.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}



}

}

构造传参的时候设置为true就可以续写文件了

五.FileReader



既然写已经会了,那我们就来读取了

packagecom.lgl.hellojava;



importjava.io.FileNotFoundException;

importjava.io.FileReader;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){

try{

//创建一个文件读取流对象,和指定名称的文件关联,保证文件存在,

//如果不存在,异常

FileReaderfileReader=newFileReader("demo.txt");

//读取单个字符,自动往下读

intcd=fileRewww.shanxiwang.netader.read();

System.out.println((char)cd);



//全部打印

intch=0;

while((ch=fileReader.read())!=-1){

System.out.println(ch);

}



fileReader.close();



}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

这样就可以按照字节读取了,我们也可以把读到的字符存储在数组中

packagecom.lgl.hellojava;



importjava.io.FileNotFoundException;

importjava.io.FileReader;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){



try{

FileReaderfileReader=newFileReader("demo.txt");

char[]buf=newchar[3];



intnum=fileReader.read(buf);



System.out.println("num:"+num+newString(buf));



}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}



}

}

OK,读出来了



六.小练习



我们字符流的读取和一些小操作算是了解了一点了,我们用一个小练习来结束本篇幅吧

需求:读取一个.java的文件,打印出来

好的,其实这个是比较简单的,我们看代码

packagecom.lgl.hellojava;



importjava.io.FileNotFoundException;

importjava.io.FileReader;

importjava.io.IOException;



publicclassHelloJJAVA{

publicstaticvoidmain(String[]args){

try{

FileReaderfileReader=newFileReader("Single.java");

char[]cs=newchar[1024];

intnum=0;

while((num=fileReader.read(cs))!=-1){

System.out.println(newString(cs,0,num));

}

fileReader.close();

}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}



}

}

是不是比较简单,读取到之后就直接存在数组中,打印出来



OK,到这里我们的IO入门算是了解了一点。

献花(0)
+1
(本文系网络学习天...首藏)