使用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特性,数据库的读写冲突由事务隔离级别控制.无论有没有显示开启事 ...
随机推荐
- 阿里一面CyclicBarrier和CountDownLatch的区别是啥
引言 前面一篇文章我们<Java高并发编程基础三大利器之CountDownLatch>它有一个缺点,就是它的计数器只能够使用一次,也就是说当计数器(state)减到为 0的时候,如果 再有 ...
- [倍增][换根DP]luogu P5024 保卫王国
题面 https://www.luogu.com.cn/problem/P5024 分析 可以对有限制的点对之间的链进行在倍增上的DP数组合并. 需要通过一次正向树形DP和一次换根DP得到g[0][i ...
- 通过 ASM 库生成和修改 class 文件
在 JVM中 Class 文件分析 主要详细讲解了Class文件的格式,并且在上一篇文章中做了总结. 众所周知,JVM 在运行时, 加载并执行class文件, 这个class文件基本上都是由我们所写的 ...
- HashMap 这套八股,不得背个十来遍?
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...
- Mybatis日志源码探究
一.项目搭建 1.pom.xml <dependencies> <dependency> <groupId>log4j</groupId> <ar ...
- 第18 章 : Kubernetes 调度和资源管理
Kubernetes 调度和资源管理 这节课主要讲三部分的内容: Kubernetes 的调度过程: Kubernetes 的基础调度能力(资源调度.关系调度): Kubernetes 高级调度能力( ...
- Linux 以非root用户安装zsh&配置on my zsh
此文章参考以下三篇文章,如有侵权请联系 Linux非root用户安装zsh, 并用oh-my-zsh进行配置 在没有sudo权限的Linux服务器下安装oh-my-zsh 不使用root权限安装zsh ...
- C++实现控制台学生学籍管理系统
操作流程 创建文件 创建管理类 管理类负责的内容如下: 提供与用户的沟通菜单界面 实现对职工增删改查的操作 数组数据与文件的读写交互 菜单功能实现 在StudentManager.h中定义Show ...
- Dynamics CRM实体系列之视图
这一节开始讲视图.视图在Dynamics CRM中代表着实体的数据展示列表,通过这个列表可以对数据进行一个初步预览,也可以进行一些数据的定向筛选和搜索进行精确的浏览一部分数据.同时视图也是查看详细实体 ...
- joda-time的简单使用及mysql时间函数的使用(今天,本周,本月)
近期在做一些首页的统计数据复习了下mysql的时间函数,以及后续修改成 传入时间查询时使用的joda-time 软件简介 JodaTime 提供了一组Java类包用于处理包括ISO8601标准在内的d ...