• 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查看源码里面的注解。

    看一下笔者写的简单的列子吧。这样子方便学习。如下

     1 static void Main(string[] args)
     2         {
     3             using (FileStream fs = File.Open("TextFile1.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
     4             {
     5                 if (fs.CanRead)
     6                 {
     7                     List<byte> dataList = new List<byte>();
     8                     byte[] buffer = new byte[1024];
     9                     int len = 0;
    10                   
    11                     while ((len = fs.Read(buffer, 0, buffer.Length)) > 0)
    12                     {
    13                         byte[] tmpBuffer = new byte[len];
    14                         Array.Copy(buffer, 0, tmpBuffer, 0, tmpBuffer.Length);
    15                         dataList.AddRange(tmpBuffer);
    16                     }
    17 
    18                     Console.WriteLine(Encoding.UTF7.GetString(dataList.ToArray(), 0, dataList.Count));
    19                 }
    20             }
    21 
    22             Console.ReadKey();
    23 
    24         }

     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#应用开发的高级部分的介绍了。

  • 相关阅读:
    ISS6 WEB服务器不能访问 grf 报表模板文件的问题
    c# 读取记事本txt文档到DataTable中
    C# 泛型LIST转DataTable
    sql 查出一张表中重复的所有记录数据
    Coolite中GridPanel真实分页(储存过程方式)
    SQL对Xml字段的操作
    反射和特性 自定义转换datatable为强类型集合
    LINQ TO SQL 并发控制
    AS3 加载文件
    使ASP.NET网站Forms验证可以指定多个登录页面
  • 原文地址:https://www.cnblogs.com/hayasi/p/5970407.html
Copyright © 2020-2023  润新知