Java进击C#——语法之IO操作
| 本章简言 |
上一章我们对线程同步进行讲解。了解如何去处理可能发生的脏数据。而本章就要讲有关于C#在读取IO文件的时候,常常用到的操作类。这一章的内容会比较少。但是笔者还是总结出来让读者们有一个学习的方向。不至于不知道学习些什么。
| File类 |
这一个静态类。可以说是一个工具类吧。他里同包含了很多关于处理文件的功能。笔者只是列出常用的一些功能。更多的希望读者们自行去了解。
1.打开一个文件流。打开方式有很三种。如下代码
public static FileStream Open(string path, FileMode mode);
public static FileStream Open(string path, FileMode mode, FileAccess access);
public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);
我们可以看到总共有四个参数。
path参数:表示文件的路径。
FileMode参数:打开文件的模式。如:新建 、开打或是新建等模式。请读者们自行查看。也可以按F12查看源码里面的注解。
FileAccess参数:操作的模式。是只读还是读写。还是只写。
FileShare参数:表示操作完之后是事情。请读者们自行查看。也可以按F12查看源码里面的注解。
看一下笔者写的简单的列子吧。这样子方便学习。如下
static void Main(string[] args)
{
using (FileStream fs = File.Open("TextFile1.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
if (fs.CanRead)
{
List<byte> dataList = new List<byte>();
byte[] buffer = new byte[];
int len = ; while ((len = fs.Read(buffer, , buffer.Length)) > )
{
byte[] tmpBuffer = new byte[len];
Array.Copy(buffer, , tmpBuffer, , tmpBuffer.Length);
dataList.AddRange(tmpBuffer);
} Console.WriteLine(Encoding.UTF7.GetString(dataList.ToArray(), , dataList.Count));
}
} Console.ReadKey(); }
FileStream类就是一个文件流。有了这个类我们就可以对文件做读写操作。相当于JAVA的FileInputStream类。上面的代码中我们可以看到笔者用到了一个Array类。他里面包含了很多对数组的操作。读者们可以看看。在输出的时候,笔者用到了编码格式的内容。Encoding是获得编码格式的开始。所以一定要记得Encoding类。
2.直接记取文件内容。我们上面看到了要读取一个文件的内容。我们要做很多的事情。但是File类事实为我们做了一个简化的方法。
Console.WriteLine(File.ReadAllText("TextFile1.txt", Encoding.UTF7));
好吧。我们上面做了那么多的事情还不如他一句话的事。跟他类似的方法都是以Read开头的。请读者们自行查看。同理我们就可以看到一些以Write开头的方法。没有错。就是写入的意思。相信不用笔者多说了。
3.删除文件。这个功能很常用。也很简单
File.Delete("TextFile1.txt");
4.判断是否存在。返回ture表示存在。
File.Exists("TextFile1.txt");
| Directory类 |
Directory类同File类一样子是一个静态类。只是File类是用于处理文件,而Directory类却是用于处理目录。说到这里相信大家都明白。这里也是笔者为什么没有说上面的File类相当于JAVA的File类了。却确的说应该是俩者加在一起相当于JAVA的File类。
1.获得目录下的文件。
string[] fileNames = Directory.GetFiles(".");
2.创建对应的目录。
DirectoryInfo dir = Directory.CreateDirectory("./test");
if (dir.Exists)
{
Console.WriteLine("创建成功");
}
else
{
Console.WriteLine("创建失败");
}
3.判断是否存在。
if (Directory.Exists("./test"))
Console.WriteLine("test目录已经存在");
| Path类 |
不得不说笔者在操作IO的时候,常常会用到Path类。他也是一个静态类。不要小看他,他有一些小功能真的很不错。下列就是笔者常常用的功能。
1.组装目录路径。
string dir = Path.Combine(".", "test");
2.获得没有扩展名的文件名。他会帮你去掉“.txt”.
string name = Path.GetFileNameWithoutExtension("TextFile1.txt");
3.获得绝对路径里面的目录路径。这个时候就会返回“E:\\test\\”
string directoryNameg = Path.GetDirectoryName("E:\\test\\TextFile1.txt");
4.判断是否为绝对路径。
Path.IsPathRooted("E:\\test\\TextFile1.txt");
| StreamReader类和StreamWriter类 |
笔者读取文本流的文件常常会用StreamReader类。我们可以看到下面的代码中有一叫@的符号。这个用于表示那后的字符串是表示路径。这个是你就可以不用“\\”了。只要用"\"就可以了。
using (StreamReader sr = new StreamReader(@".\TextFile1.txt", Encoding.UTF8, true))
{
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
}
而常常用StreamWriter类来写入。
using (FileStream fs = new FileStream(@".\TextFile1.txt", FileMode.OpenOrCreate))
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("i am aomi");
sw.Flush();
}
| XmlDocument类 |
笔者在开发应用的时候,常常会遇到关于读取xml配置文件。在C#里面常常会用到XmlDocument类。他就是一个读取Xml文件的操作类。相当于JAVA的Dom4j里面的SAXReader类。大部分的操作都很像。读者们不用担心。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("./XMLFile1.xml");
XmlElement xmlEle = xmlDoc.DocumentElement; if (xmlEle.HasChildNodes)
{
Console.WriteLine(xmlEle.SelectSingleNode("Name").InnerText);
}
| 本章总结 |
本章的内容会比较少。但笔者认为也不可以忽略。到了这一章可以说关于C#基础知识便全部结束了。而后的章节将进入C#应用开发的高级部分的介绍了。
Java进击C#——语法之IO操作的更多相关文章
- Java进击C#——语法之知识点的改进
本章简言 上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知 ...
- Java进击C#——语法之ADO.NET
本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分 ...
- Java进击C#——语法之多线程
本章简言 上一章中笔者对C#一些独有的语法点进行讲解,相信也可以看C#的一些神奇之处.那么本章主要是放在多线程这方面的知识.不管是C#还是JAVA在开发过程或多或少都会用到关于多线程的编程.当然笔者不 ...
- Java进击C#——语法之面向对象
本章简言 上一章笔者讲到关于ADO.NET相关的知识,知道了如何去访问数据库.本章将来讲关于面向对象的思想.不管在JAVA还是在C#面向对象思想的重要性都是占了一个很大的成份.往往他就像呼吸一样子,更 ...
- Java进击C#——语法之基础
本章简言 上一章讲到关于项目工程开发常用的知识点,有了前面俩章的介绍之后.本章正式开始介绍关于C#的基础语法.我们都很清楚C#也是面向对象的计算机语言.而且他跟JAVA的相似度高达80%.所以很多语法 ...
- Java进击C#——语法之线程同步
上一章我们讲到关于C#线程方向的应用.但是笔者并没有讲到多线程中的另一个知识点--同步.多线程的应用开发都有可能发生脏数据.同步的功能或多或少都会用到.本章就要来讲一下关于线程同步的问题.根据笔者这几 ...
- 第12讲-Java中的IO操作及对象的序列化与反序列化
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 io操作 1.2.2 对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...
- 文件IO操作
前言 本文介绍使用java进行简单的文件IO操作. 操作步骤 - 读文件 1. 定义一个Scanner对象 2. 调用该对象的input函数族进行文件读取 (参见下面代码) 3. 关闭输入流 说明:其 ...
- 标准IO操作
前言 本文介绍使用java进行简单的标准IO操作. 操作步骤 1. 定义一个Scanner对象 2. 调用该对象的input函数族 (参见下面代码) 3. input函数的返回结果即是获取到的输入 示 ...
随机推荐
- CodeSimth - .Net Framework Data Provider 可能没有安装。解决方法
今天想使用CodeSimth生成一个sqlite数据库的模板.当添加添加数据库的时候发现: .Net Framework Data Provider 可能没有安装. 下面找到官方的文档说明: SQLi ...
- 深入理解BFC
定义 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是格式化上 ...
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- angular 源码分析 1 - angularInit()
angularjs 是个神奇的框架,由于我的好奇,想了解她的内部工作原理,只能一步一步的走进她,靠近她,和她深入的交流. angularjs 的入口是什么样子的呢?一起掀起她的盖头吧. 在这里我只讲方 ...
- 使用SecureCRT连接虚拟机(ubuntu)配置记录
这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速度不理想,使用该方法亲测本机效果确实ok,特此记录. Secu ...
- Asp.Net WebApi核心对象解析(上篇)
生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...
- vs15 preview5 离线安装包
1.介绍 vs15是微软打造的新一代IDE,全新的安装方式.官网介绍如下(https://blogs.msdn.microsoft.com/visualstudio/2016/10/05/announ ...
- bzoj1584--DP
题目大意:有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分成若干段,定义每段的不河蟹度为:若 ...
- 分享一个php的启动关闭脚本(原)
自己简单写的一个php服务的启动脚本和大家分享 思路(实现的原理): 1:function模块+case语句多分支判断 2:通过添加# chkconfig: 2345 43 89注释实现开机自启动(前 ...