本文实例讲述了.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);
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(); } }
using(某个可以释放资源的类) { 操作 } //1.操作执行完,会自动释放。 //2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try finally。
//按行写入 StreamWriter sw =new StreamWriter(@"target",true,Encoding.GetEnconding("GB2312")); sw.WriteLine("HelloWorld"); //按行读取 StreamReader sr =new StreamReader(@"Source"); sr.ReaderLine(); //每次返回一个字符串
希望本文所述对大家的.net程序设计有所帮助。
本文向大家介绍.Net中的json操作类用法分析,包括了.Net中的json操作类用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了.Net中的json操作类用法,对于进行.Net程序设计来说是非常重要的技巧。具体分析如下: 首先需要引用 System.Web.Extensions.dll 这个类库 命名空间需要加上:System.Web.Script.Serialization
1. 打开和关闭文件 1.1 打开文件 访问文件前,需要使用用 Python 内置的 open() 函数打开一个文件: open(path, access_mode) path 是要访问的文件的路径名 access_mode 是文件的访问模式 可以是只读、读写、追加等模式,所有可能的取值见 1.2 小节 这个参数是可选的,缺省情况下,是以只读模式 r 打开文件 open 返回一个 file 对象
本文向大家介绍Erlang IO编程之文件目录操作常用方法小结,包括了Erlang IO编程之文件目录操作常用方法小结的使用技巧和注意事项,需要的朋友参考一下 Erlang用于操纵文件I/O的模块有: file模块:打开、读、写、关闭文件已经操作目录的方法基本都在这里 filename模块:提供平台独立方式用于操纵文件名 filelib模块:file模块的扩展,提供了更多的实用工具,在file模块
本文向大家介绍Java文件(io)编程之文件字符流使用方法详解,包括了Java文件(io)编程之文件字符流使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了文件字符流的使用方法,供大家参考,具体内容如下 案例1: 读取一个文件并写入到另一个文件中,char[] 来中转。 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串。 打开D盘的test.txt文件
本文向大家介绍php文件操作之文件写入字符串、数组的方法分析,包括了php文件操作之文件写入字符串、数组的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php文件操作之文件写入字符串、数组的方法。分享给大家供大家参考,具体如下: 场景一:用文本文档记录一些操作日志,因为对于一些频繁的操作,操作记录的数据量势必会很大,如果用数据库来存储会给数据库带来压力。 场景二:代替输出函数打印
本文向大家介绍Python中操作文件之write()方法的使用教程,包括了Python中操作文件之write()方法的使用教程的使用技巧和注意事项,需要的朋友参考一下 write()方法把字符串str写入文件。没有返回值。由于缓冲,字符串可能不实际显示文件,直到flush()或close()方法被调用。 语法 以下是write()方法的语法: 参数 str -- 这是要被写入的文件中的字