数据流的操作(System.IO)

Stream:数据流是一个抽象基类,派生FileStream实例与MemoryStream实例,自己本身不能实例化,只能由派生类来初始化.

FileStream:文件流,主要对文件的操作,向文件写入数据,从文件中读取数据.实例化时,有一个文件路径参数.

MemoryStream:内存流,实例化时,参数是字节数组byte[],字符串转化为字节数组:

  1、byte[] str=Encoding.UTF8.getBytes("字符串");

  2、byte[] str=Encoding.GetEncoding("gb2312").GetBytes("字符串");

StreamReader:从数据流中读出数据,实例化参数有两种,数据流和文件,还有个参数是编码.

StreamWriter:往数据流中写入数据,实例化参数有两种种,数据流和文件,还有个参数是编码.

Directory:文件夹操作的静态类,提供静态方法,与DirectoryInfo实例大同小异,只不过一个静态调用,一个是实例调用.

File:文件操作的静态类,提供静态方法,与FileInfo实例大同小异,只不过一个静态调用,一个是实例调用.

注意:

  1、数据流在写入与读出时,都要指定编码,否则容易乱码。

  2、在写入数据流时,要指定当前数据流的位置,不指定将覆盖原有数据流。

  

 //写入内存流
MemoryStream memoryString1 = new MemoryStream();
memoryString1.Write(Encoding.Default.GetBytes("我是要写入内存流的字符串"), 0, 10);
memoryString1.Flush();

//从内存流MemoryStream读出
byte[] buffer = Encoding.Default.GetBytes("我是内存流");
using (Stream stream2 = new MemoryStream(buffer))
{
StreamReader streamReader = new StreamReader(stream2, Encoding.GetEncoding("gb2312"));
var reMemoryStream = streamReader.ReadToEnd();
writeline(reMemoryStream);
}

//写入FileStream
Boolean fileIsExist = File.Exists((Directory.GetCurrentDirectory() + "/a.text"));
FileStream fileStream1;
if (fileIsExist)
{
fileStream1 = new FileStream(Environment.CurrentDirectory + "/a.text", FileMode.Open);
}
else
{
fileStream1 = File.Create(Directory.GetCurrentDirectory() + "/a.text");
}
fileStream1.Position = fileStream1.Length;//数据流的位置,对数据流的读写操作都是从此位置开始的.如果不指定此属于,默认会把原文件中的内容覆盖
StreamWriter fielStreamWrite = new StreamWriter(fileStream1, Encoding.GetEncoding("gb2312"));
fielStreamWrite.Write("我是文件流1111,");
fielStreamWrite.Write("我是文件流2");
fielStreamWrite.Flush();
fileStream1.Close();

//从FileStream读出
using (Stream fileStream2 = new FileStream(Directory.GetCurrentDirectory() + "/a.text", FileMode.Open))
{
fileStream2.Position = 0;
StreamReader fileStreamReader = new StreamReader(fileStream2, Encoding.GetEncoding("gb2312"));
var reFileStream = fileStreamReader.ReadToEnd();
writeline(reFileStream);
}


//写入StringWrite
using (StringWriter stringWrite = new StringWriter())
{
stringWrite.Write("我是string流1,");
stringWrite.Write("我是string流2");
stringWrite.Flush();
StringBuilder sb = stringWrite.GetStringBuilder();
writeline(sb);
}
//从StringRead读出
using (StringReader stringReader = new StringReader("我是string"))
{
var reStringReader = stringReader.ReadToEnd();
writeline(reStringReader);
}

 

 

posted @ 2012-02-25 16:01  pantherbean  阅读(1321)  评论(0编辑  收藏  举报