黑马程序员_IO流

---------------------- android培训java培训、期待与您交流! ----------------------

 

概念:程序的主要任务是操作数据,在运行时,这些数据都必须位于内存中,并且属于特定的类型,程序才能操控它们。io就是指应用程序对设备的数据输入与输出。在java中把一组有序的数据序列称为流,根据操作的不同可以把流分为输入流和输出流。

File类:它既能够代表一个特定的名称,又能代表一个目录下的一组文件的名称,如果是文件的集合,我们可以调用list()方法,返回一个字符数组,包含该目录下的文件名。如果是一个文件时,我们能够创建,删除文件,判断文件是否存在等操作。

字符输入流和输出流
Reader类型:ArrayReader 字符数组输入流,BufferedReader为其它Reader提供缓冲区有一个一次读取一行的readLine()方法,而Bufferedwriter没有WritLine方法;StringReader 字符串输入流,InputStreamReader将InputStream转换为Reader类型(FileReader是InputStreamReader的一个子类,用于从文件中读取数据,不能指定字符编码类型)能够按照指定字符编码读取输入流中的字符;

字节输入流和输出流
InputStream表示字节输入流:主要方法:read()从输入流中读取数据,close()关闭输入流;OutputStream表示字节输出流,主要方法 void write()往输出流写入数据,void close()关闭输出流,void flush()一些带有缓冲区的子类覆盖该方法,通过缓冲区的输出流写数据时,数据先保存在缓冲区中,积累到一定程度才会真正写到输出流中,缓冲区实际上是一块内存空间。
所有的字节输入流都是InputStream类的直接或者间接子类,ByteArrayInputStream 字节数组输入流,FileInputStream 文件输入流。

RandomAccessFile:该类不是算是IO体系中子类,而是直接继承自Object,但是它是IO包中成员,具备读和写功能。
 内部封装了一个数组,而且通过指针对数组的元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的 位置。通过构造函数可以看出,该类只能操作文件。操作文件模式有:只读r,读写rw等。

如果模式为只读 r,不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。
如果模式rw,操作的文件不存在,会自动创建。如果存则不会覆盖。

import java.io.*;
class  TestRandomAccessFile
{
 static String f = "1.txt";
 public static void main(String[] args) throws Exception
 {
  RandomAccessFile rf = new RandomAccessFile(f,"rw");
  for (int i=0;i<7 ;i++ )
  {
   rf.writeDouble(i*1.414);
  }
  rf.close();
  display();
  System.out.println("Hello World!");
 }
 public static void  display() throws Exception
 {
  RandomAccessFile rf = new RandomAccessFile(f,"r");
  for (int i=0;i<7 ;i++ )
  {
   System.out.println(rf.readDouble());
  }
  rf.close();
 }
}


管道流的实例

import java.io.*;

public class TestPipedStream
{
  public static void main(String[] args)
   {
     try{
     sender s = new sender();
     receiver r = new receiver();
     PipedOutputStream out=s.get();
     PipedInputStream in =r.get();
     out.connect(in);
     s.start();
     r.start(); 
     }catch(Exception e){}
   }
}

class sender extends Thread
{
   PipedOutputStream out = new PipedOutputStream();
   PipedOutputStream get()
   {
     return out;
   }
   public void run()
   {
     String s = new String("hello  world");
     try
        {
       out.write(s.getBytes());
          out.close();
        }catch(Exception e){}
   } 
}

class receiver extends Thread
{
  PipedInputStream in = new PipedInputStream();
  PipedInputStream get()
  {
   return  in;
  }
   public void run()
   {
   try
     {
       byte[] buf = new byte[1024];
       int len = in.read(buf);
       String s = new String(buf,0,len);
       System.out.println("the fllowing message from sender\n"+s);
       in.close();
     }catch(Exception s){}

    }
}


---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值