IO

                                        IO

1.流的概念和作用

流:代表任何有能力产出数据源对象或者是有能力接受数据的接收对象

流的本质:数据传输,根据数据传输性将流抽象为各种类,方便更直观的进行数据操作

流的作用:为数据源和目的地建立一个输送通道。


2.java中的节点流:

     节点流分为字节流和字符流。 (1)字节流为FileInputStream(输入)和FileOutputStream(输出)两个类。在字节流中,我们通常用字节数组(byte[ ])来作为运输这些字节流的载体。 (2)字符流为FileReader(读入)和FileWriter(写出)两个类。在字符流中,我们通常用字符数组(char[ ])来作为运输这些字节流的载体。

3.特性:

  相对于程序来说,输出流是往存储介质或数据通道写入数据,而输入流是从存储介质或数据通道中读取数据,一般来说关于流的特性有下面几点:

1、先进先出,最先写入输出流的数据最先被输入流读取到。

2、顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile可以从文件的任意位置进行存取(输入输出)操作

3、只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。 



outputStream中的三个基本的写方法

abstract void write(int?b):往输出流中写入一个字节。

void write(byte[]?b) :往输出流中写入数组b中的所有字节。

void write(byte[]?b, int?off, int?len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。

其它方法

void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

void close() :关闭输出流,释放和这个流相关的系统资源。


一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性。    

       1)public boolean exists( ) 判断文件或目录是否存在

       2)public boolean isFile( ) 判断是文件还是目录 

       3)public boolean isDirectory( ) 判断是文件还是目录

       4)public String getName( ) 返回文件名或目录名

       5)public String getPath( ) 返回文件或目录的路径。

       6)public long length( ) 获取文件的长度 

       7)public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。 

       File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:

       1) public boolean renameTo( File newFile );    重命名文件

       2) public void delete( );   删除文件

       3)  public boolean mkdir( ); 创建目录

 三.字节流和字符流


字节流:InputStream和OutputStream是java按照最小字节单位读取的流,每次都读取一个字节。


 字符流:是以字符为单位进行数据处理的IO流。


 字节流与字符流之间的区别?


1.读取的单位不同:字节流是以字节为单位(8位2进制),字符流是以字符为单位,根据码表来映射字符


2.处理对象不同:字节流可以处理所有类型的数据(如图片,avi等),字符流只可以处理字符类型的数据


四.节点流


 1.文件:FileInputStream,FileOutputStream


```java

public class IODemo2 {

       //声明输入流,输出流

       staticInputStream in = null;

       staticOutputStream os = null;

       publicstatic void main(String[] args) {

              //创建流

              try{

                     in= new FileInputStream("D:/text.txt");

                     //如果输出流中没有该文件,java会自动帮你创建该路径文件

                     os= new FileOutputStream("E:/text.txt");

                     //字节数据

                     byte[]b = new byte[1024];

                     //长度

                     intlen=0;

                     //读取文件内容并写入

                     while((len=in.read(b))!=-1){

                            //写入,如果写读取长度范围,就会一次性读取1024范围,造成空间浪费读取

                            os.write(b,0,len);

                     }

                     //清理缓冲

                     os.flush();             

              }catch (FileNotFoundException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }catch (IOException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }finally{

                     //关闭资源

                     //判断是否存入的流对象为空

                     try{

                            if(in!=null){ //防止空指针异常


                                   in.close();

                            }

                            if(os!=null){ //防止空指针异常

                            os.close();

                            }

                     }catch(IOException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

              }

              }

       }

```


##### 2.FileReader,FileWriter


```

public class Test01 {


       publicstatic void main(String[] args) throws IOException {

              //输入流,输出流

              Readerrd = new FileReader("D:/text.txt");

              Writerwt = new FileWriter("D:/hao.txt");

              //字符数组

              char[]car = new char[1024];

              //个数

              intlen=-1;

              while(-1!=(len=rd.read(car))){

                     wt.write(car,0,len);

                     System.out.println("完成拷贝!");

              }

              //刷出

              wt.flush();

              //关闭资源

              wt.close();

              rd.close();

       }

}


```




#### 五.对象(功能)流


1.ObjectOutputStream(对象输出流)


2.ObjectInputStream(对象输入流)


```java

//对象输出流

       publicstatic void getWrite(String name) throws IOException {

              ObjectOutputStreamos = new ObjectOutputStream(new FileOutputStream(name));

              os.writeBoolean(false);

              os.writeChar(97);

              os.writeObject(newPerson("李杨",22));

              os.writeUTF("UTF-8");

              //刷出

              os.flush();

              //关闭资源

              os.close();

       }


       //对象输入流

       publicstatic void getRead(String name) throws IOException, ClassNotFoundException {

              ObjectInputStreamois = new ObjectInputStream(new FileInputStream(name));

              booleanb = ois.readBoolean();

              charc = ois.readChar();

              Objecto = ois.readObject();

              System.out.println(b+"---->"+c+"----->"+o);

              //关闭资源

              ois.close();

       }

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

推荐阅读更多精彩内容