使用FileStream读写数据
这节讲一下使用FileStream读写数据,这是一个比较基础的流。
FileStream类只能处理原始字节,所以它可以处理任何类型的文件。
先看一下它的构造方法:
FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);
这个方法最少有两个参数,也就是前两个,第一个是文件路径,第二个FileMode枚举,规定文件的打开方式,是正常打开还是创建等等,第三个是FileAccess枚举,规定流的访问形式,是写入还是读取等等,不指明这个参数,它的默认值是ReadWrite,也就是可读可写。
FileMode枚举成员:
FileAccess枚举成员:
File和FileInfo类都提供了OpenRead()和OpenWrite()这两个方法,可以快速创建只读或者只写的FileStream对象。
读写文件:
读取文件,需要用到Read()和Write(),这两个方法最常用的重载如下所示:
len=fs.Read(buffer, 0, buffer.Length)
write.Write(buffer, 0, len)
buffer是一个字节数组,用于存放一次读取的字节,可以自定义大小;第二个参数是偏移量,指示从buffer的第几个索引开始读,一般都是0,从开始读取;第三个参数是一次读取的大小,这个一般也都是固定的,是数组的长度。Read()方法的返回值是本次读取实际读取 的长度,因为存在最后一次读取的长度不满buffer的长度的情况,Write()方法,第三个参数是指定写入的长度,这里一般指定Read()方法的返回值,这样就不会出现将多余的无关数据写入文件中。
下面看一下例子:
//读取数据并展示
FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);
int len, i = 0;
//存放每次读取的数据
byte[] buffer = new byte[5];
//存放所有读到的数据,最后将其转换为字符串
byte[] data = new byte[fs.Length];
//循环读取文件
while ((len = fs.Read(buffer, 0, buffer.Length)) != 0)
{
for (int j = 0; j < len; j++)
{
data[i++] = buffer[j];
}
}
//jiang
Console.WriteLine(Encoding.UTF8.GetChars(data));
//数据写入
FileStream write = new FileStream("./demo_copy.txt", FileMode.Create, FileAccess.Write);
//重置指针
fs.Seek(0, SeekOrigin.Begin);
while ((len = fs.Read(buffer, 0, buffer.Length)) != 0)
{
write.Write(buffer, 0, len);
}
fs.Dispose();
write.Dispose();
第23行用到了一个方法Seek(),这个是用来设置当前文件指针的位置的,一般情况下,文件读到哪指针就指到哪,而通过这个方法,可以重新设置指针的位置,它的第一个参数是偏移量,为正数则向后移动,为负数则向前移动,第二个参数是SeekOrigin枚举,它有三个成员,Begin,End,Current,分别指示文件的开始,结束和当前位置,偏移量根据这个枚举值进行移动。
另外,操作结束后要及时释放资源,或者一开始使用using引用要释放的对象。
这是我的公众号二维码,获取最新文章,请关注此号
使用FileStream读写数据的更多相关文章
- [转载]FileStream读写文件
FileStream读写文件 FileStream类:操作字节的,可以操作任何的文件 StreamReader类和StreamWriter类:操作字符的,只能操作文本文件. 1.FileStream类 ...
- [AIR] 读写数据
新建两个Flash AIR文档read.fla,write.fla:write.fla作为写入数据,read.fla作为读取数据,仅作为测试的例子. 在write.fla关键帧第一帧写一下代码: im ...
- HDFS读写数据块--${dfs.data.dir}选择策略
最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...
- win10 svchost.exe (LocalSystemNetworkRestricted)大量读写数据
博主的笔记本联想Y50开机完毕后会不停滴读硬盘/写硬盘,导致开机后一段时间内无法正常使用电脑(硬盘读写高峰期).打开资源监视器发现是"svchost.exe (LocalSystemNetw ...
- inputstream和outputstream读写数据模板代码
//读写数据模板代码 byte buffer[] = new byte[1024]; int len=0; while((len=in.read(buffer))>0){ out.write(b ...
- FileStream读写文件流
用FileStream 读取文件流并显示给文件内容 string p = @"C:\Users\Administrator\Desktop\1.txt"; FileStream f ...
- 百度地图LBS云平台读写数据操作类
最近写了个叫<行踪记录仪>的手机软件,用了百度云来记录每个用户的最近位置,以便各用户能在地图上找到附近的人,为此写了个类来读写数据,大致如下: import java.util.Array ...
- 01. SQL Server 如何读写数据
原文:01. SQL Server 如何读写数据 一. 数据读写流程简要SQL Server作为一个关系型数据库,自然也维持了事务的ACID特性,数据库的读写冲突由事务隔离级别控制.无论有没有显示开启 ...
- SQL Server 如何读写数据
01. SQL Server 如何读写数据 一. 数据读写流程简要SQL Server作为一个关系型数据库,自然也维持了事务的ACID特性,数据库的读写冲突由事务隔离级别控制.无论有没有显示开启事 ...
随机推荐
- Git 在解决冲突的时候文件覆盖
更新代码导致被还原或覆盖的场景:1.触发冲突的必要条件是修改同一个文件且修改的位置非常近,否则Git会自动合并其内容避免更新代码导致被还原或覆盖的解决方案1.少修改的地方(生产环境.公网测试环境):推 ...
- IOC容器模拟实现
运用反射机制和自定义注解模拟实现IOC容器,使其具有自动加载.自动装配和根据全限定类名获取Bean的功能. 一. 实现原理 1-1 IOC容器的本质 IOC容器可理解为是一个map,其中的一个entr ...
- Java开发工程师面试-基础
JDK.JRE.JVM有什么区别? JDK:Java Development Kit 针对Java程序员的产品 JRE:Java Runtime Environment是运行Java的环境集合 JVM ...
- istio:在vs中实现ab测试和路径切割
此篇内容 主要目的是总结vs中的match的有关规则和在istio中如何实现路径切割(当下版本1.8.2) 实验demo main.go package main import ( "git ...
- Python面向对象练习题
1.模拟栈操作原理 先进后出 1.初始化(创建一个存储数据的列表) 2.进栈使用列表保存数据 3.出栈 使用列表删除数据 4.查看栈顶元素 切片获取列表最后一位数据 5.判断是否为空栈 6 ...
- java面试-集合类不安全问题及解决方案
一.List 1.代码演示 public class ArrayListNotSafeDemo { public static void main(String[] args) { List<S ...
- ubuntu16.04 安装opencv3.4.0
参考 https://www.cnblogs.com/arkenstone/p/6490017.html https://blog.csdn.net/u013180339/article/detail ...
- 2021浙江省程序省赛(ACFGJLM题解)
A 签到,加起来就行了,记得等于属于先手赢(2A) C 题意 给八个点三维坐标,问是否在三维是立方体 思路 八个点的连成56条线,如果是立方体的话有8条,24条,24条相同的线,且都不相同 用map存 ...
- SpringBoot - yml写法
1 #区分大小写 2 server: 3 port: 8081 4 path: hello 5 6 #字面量:普通的值(数字,字符串,布尔): 7 #字符串:双引号 - 不转义 单引号 - 转义 8 ...
- Periodic Strings UVA - 455
A character string is said to have period k if it can be formed by concatenating one or more repet ...