.NET中的IO操作之文件流
读操作
//1.创建文件流
FileStream fsRead =new FileStream("1.txt",FileMode.Open);
//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。
byte[] bytes =new byte[fsRead.Length];
//3.开始读取, 返回值是读取到的长度。
int r =fsRead.Read(bytes,0,bytes.Lenght);
//4.关闭释放流
fsRead.Close();
fsRead.Dispose();
写操作
//1.创建写入的文件流
FileStream fsWrite fsWrite =new FileStream(@"xxx",FileMode.OpenOrCreate);
//2.创建缓冲区
String msg ="HelloWorld";
byte[] bytes =Enconding.UTF8.GetBytes(msg);
//3.开始写入
fsWrite.Write(bytes,0,bytes.Length);
//4.关闭
fsWrite.Close();
fsWrite.Dispose();
byte数组与string之间的转换
/*在文件流写入的时候,经常需要string 和 byte数组之间的转换。
这里简单的描述一下,这方面的做法。*/
1.string 到 byte[]数组。
string msg ="HelloWorld";
//使用UTF8编码
byte[] bytes =System.Text.Encoding.UTF8.GetByte(msg);
//使用系统默认编码
byte[] bytes =System.Text.Encoding.Default.GetByte(msg);
2.byte[]到string
string newMsg =System.Text.Encoding.UTF8.GetString(bytes);
编码问题
为什么中文会乱码?
UTF8 编码中,一个中文字符占用两个字节。
GBK 编码中,一个中文字符占用三个字节。
UTF8 编码中,用两个字节保存一个汉字,如果你用GBK读取,按照三个字节一个字的格式去读。当然乱码了。反之也是一样的。
总结起来,无论是36码的鞋子,穿在50码的脚丫子上。还是36码的脚丫子,穿50码的鞋。看起来都不会很舒服。
所以,按照什么格式写入,就按照什么格式读取。才是正解。
PS:1.Utf8是国际标准。
2.GB2312 是国标编码,支持中文的。
3.GBK是对GB2312的扩展,支持繁体中文。
什么类可以Dispose( )?
1.Dispose()表示释放资源,.NET中对Dispose()有一个统一的约定或者叫描述。这个约定表现为一个接口。
或者说这个接口,是一个红头文件,红头文件中约定了如何释放资源。
所有实现了IDisposable接口的类都可以释放,可以Dispose();
那么类库中什么样的类会实现IDisposable接口呢?
我的理解是这样的,一般仅占用托管堆中内存资源的类或对象。一般不需要Dispose()。垃圾回收就搞定了。
但是对于,文件句柄,网络端口号,数据库连接等,CLR的垃圾回收机制是不管的。
所以一般这部分内容需要实现IDisposable接口。
文件流操作的异常处理
//只有把fs定义在这里,finally中才能引用得到。
FileStream fs =null;
try
{
fs =new FileStream(@"文件路径",FileMode.Create);
byte[] bytes = Encoding.Default.GetBytes("HelloWorld");
fs.Write(bytes,0,byte.Length);
}
finally
{
if(fs != null) //如果fs未赋值,那么直接Dispose就会引发空指针异常。
{
fs.Dispose();
}
}
简化上述的写法,虽然严谨但是稍微有点麻烦。Microsoft提供了语法糖。就是using的语法using(某个可以释放资源的类){操作}//1.操作执行完,会自动释放。//2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try finally。
StreamWriter和StreamReader
//按行写入
StreamWriter sw =new StreamWriter(@"target",true,Encoding.GetEnconding("GB2312"));
sw.WriteLine("HelloWorld");
//按行读取
StreamReader sr =new StreamReader(@"Source");
sr.ReaderLine(); //每次返回一个字符串
.NET中的IO操作之文件流的更多相关文章
- .NET中的IO操作之文件流(一)
读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...
- .NET中的IO操作基础介绍
关于IO简介 .NET中的IO操作,经常需要调用一下几个类. clipboard[] .FileStream类 文件流类,负责大文件的拷贝,读写. .Path类 Path类中方法,基本都是对字符串(文 ...
- Java中的IO操作和缓冲区
目录 Java中的IO操作和缓冲区 一.简述 二.IO流的介绍 什么是流 输入输出流的作用范围 三.Java中的字节流和字符流 字节流 字符流 二者的联系 1.InputStreamReader 2. ...
- C++ 学习笔记之——文件操作和文件流
1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...
- java中的IO操作
IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中.根据操作数据的种类可以把IO流分为字节流(InputStream,OutputSt ...
- java中的IO操作总结
一.InputStream重用技巧(利用ByteArrayOutputStream) 对同一个InputStream对象进行使用多次. 比如,客户端从服务器获取数据 ,利用HttpURLConnect ...
- java学习系列(一)Java中的IO操作
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入\输出操作,在Java中把不同的输入\输出源抽象为"流",通过流的方式允许Java程序使用相同的方式来访问不同的输 ...
- python中的IO操作
python中的基本IO操作: 1) 键盘输入函数:raw_input(string),不作处理的显示,与返回. input(string),可以接受一个python表达式作为返回,python内部得 ...
- 【转】Java中的IO操作
在使用io操作之前,先看一下java中的文件类File如何使用.File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他 ...
随机推荐
- Eclipse UML插件Green UML、AmaterasUML
一.Green UML插件 1.查看Eclipse版本 查看当前电脑上安装的Eclipse版本(Help-About Eclipse Platform),是3.3.2版本的. 2.查看相应插件版本 然 ...
- 要件审判九步法及其基本价值 z
要件审判九步法及其基本价值 发布时间:2014-12-24 14:29:05 作者介绍 邹碧华,男,1967年出生于江西奉新,毕业于北京大学法学院,获法学博士学位.上海市高级人民法院副院长.2006年 ...
- Android 2.3 NFC简介
Android 2.3加入了NFC(近场通讯)的支持.官网developer.android.com的英文介绍如下:Near Field Communications (NFC)Android 2.3 ...
- Stream语法详解
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- [Java] 字符流 Writer,输出字符数据PrintWriter
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- struts2访问servlet API
搭建环境: 引入jar包,src下建立struts.xml文件 项目配置文件web.xml. web.xml: <?xml version="1.0" encoding=&q ...
- chinapay
http://s.yanghao.org/program/viewdetail.php?i=71959 http://www.codeproject.com/csharp/biginteger.asp ...
- DP走方格型
Hrbust 1812 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1812 有 ...
- Android开发-API指南-Intent和Intent过滤器
Intents and Intent Filters 英文原文:http://developer.android.com/guide/components/intents-filters.html 采 ...
- Flex 日期选择器控件
在构建用户界面时,经常用到日期的输入和选择. 输入日期时,用户可以使用键盘输入,也可以在类似于日历的弹出式对话框中,通过鼠标单击所选日期. 在Flex中可以通过日期输入控件实现输入和选择日期.Flex ...