高效大文件处理:在.NET中逐行读取2000M的txt和json文件的方法与实例

作者:微信公众号:【架构师老卢】
12-3 12:41
1276

概述:在.NET中,通过使用FileStream和逐行读取的方式,能够高效处理大文件(如2000M的txt和json)。这种方法降低了内存消耗,提高了性能,同时考虑了文件共享性。示例代码清晰展示了如何实现逐行读取,对于大文件处理提供了简单而有效的解决方案。

在.NET中,高效读取大文件的内容可以通过使用FileStream以及逐行或逐块读取的方式来降低内存消耗。以下是分别读取大文本文件和大JSON文件的示例,以及它们的优点:

高效读取大文本文件(例如2000M的txt文件)

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string filePath = "path/to/your/largeTextFile.txt";

        // 使用FileStream打开文件,指定FileShare.ReadWrite以允许多个读取器同时访问文件
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            // 使用StreamReader逐行读取文件内容
            using (StreamReader reader = new StreamReader(fileStream, Encoding.UTF8))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    // 在这里处理每一行的数据,可以输出到控制台或进行其他操作
                    Console.WriteLine(line);
                }
            }
        }
    }
}

优点:

  1. 低内存消耗: 使用FileStream和逐行读取方式,不需要一次性加载整个文件到内存中。
  2. 高性能: 逐行读取方式降低了对内存的需求,提高了文件读取的性能。
  3. 文件共享: 通过指定FileShare.ReadWrite,允许其他读取器或写入器同时访问文件。

高效读取大JSON文件(例如2000M的json文件)

using System;
using System.IO;
using Newtonsoft.Json;

class Program
{
    static void Main()
    {
        string filePath = "path/to/your/largeJsonFile.json";

        // 使用FileStream打开文件,指定FileShare.ReadWrite以允许多个读取器同时访问文件
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            // 使用JsonTextReader逐行解析JSON文件
            using (JsonTextReader jsonReader = new JsonTextReader(new StreamReader(fileStream)))
            {
                while (jsonReader.Read())
                {
                    if (jsonReader.TokenType == JsonToken.StartObject || jsonReader.TokenType == JsonToken.StartArray)
                    {
                        // 在这里处理每一个JSON对象或数组
                        Console.WriteLine("Start of object or array");
                    }
                    else if (jsonReader.TokenType == JsonToken.EndObject || jsonReader.TokenType == JsonToken.EndArray)
                    {
                        // 在这里处理JSON对象或数组的结束
                        Console.WriteLine("End of object or array");
                    }
                    else if (jsonReader.TokenType == JsonToken.PropertyName)
                    {
                        // 在这里处理JSON属性名称
                        Console.WriteLine($"Property Name: {jsonReader.Value}");
                    }
                    else if (jsonReader.TokenType == JsonToken.String)
                    {
                        // 在这里处理字符串值
                        Console.WriteLine($"String Value: {jsonReader.Value}");
                    }
                    // 其他类型的处理可以继续扩展
                }
            }
        }
    }
}

优点:

  1. 低内存消耗: 使用FileStream和逐行读取方式,不需要一次性加载整个文件到内存中。
  2. 高性能: 逐行读取方式降低了对内存的需求,提高了文件读取的性能。
  3. 文件共享: 通过指定FileShare.ReadWrite,允许其他读取器或写入器同时访问文件。

请确保替换示例中的文件路径为你实际的文件路径。这两个示例都考虑了文件的共享性,允许多个读取器同时访问文件,这在某些场景下可能是有益的。

阅读排行