public void get10FirstLines()
{
StreamReader sr = new StreamReader(path);
String lines = "";
lines = sr.readLine();
}
如何在字符串中获取文件的前10行?
答案 0 :(得分:26)
不是直接使用StreamReader
,而是使用返回IEnumerable<string>
的{{3}}。然后,您可以使用LINQ:
var first10Lines = File.ReadLines(path).Take(10).ToList();
使用File.ReadLines
代替File.ReadLines
的好处是仅 读取您感兴趣的行,而不是读取整个文件。另一方面,它仅适用于.NET 4+。如果你想要它用于.NET 3.5,那么使用迭代器块很容易实现。
对ToList()
的调用是强制对查询进行评估(即实际读取数据),使其完全读取一次。如果没有ToList
调用,如果您尝试多次迭代first10Lines
,它会多次读取该文件(假设它完全有效;我似乎记得File.ReadLines
不是在这方面实施得非常干净。
如果您希望前10行作为单字符串(例如将“\ r \ n”分隔开来),那么您可以使用string.Join
:
var first10Lines = string.Join("\r\n", File.ReadLines(path).Take(10));
显然,您可以通过更改调用中的第一个参数来更改分隔符。
答案 1 :(得分:5)
var lines = File.ReadAllLines(path).Take(10);
答案 2 :(得分:4)
您可以尝试使用File.ReadLines。试试这个: -
var lines = File.ReadLines(path).Take(10);
在您的情况下尝试此操作,因为您希望前10行作为单个字符串,因此您可以尝试使用string.Join()
,如下所示:
var myStr= string.Join("", File.ReadLines(path).Take(10));
答案 3 :(得分:3)
StringBuilder myString = new StringBuilder();
TextReader sr = new StreamReader(path);
for (int i=0; i < 10; i++)
{
myString.Append(sr.ReadLine())
}
答案 4 :(得分:2)
String[] lines = new String[10];
for (int i = 0; i < 10; i++)
lines[i] = sr.readLine();
循环十次并将结果放在一个新数组中。
答案 5 :(得分:0)
public void skip10Lines()
{
StringBuilder lines=new StringBuilder();
using(StreamReader sr = new StreamReader(path))
{
String line = "";
int count=0;
while((line= sr.ReadLine())!=null)
{
if(count==10)
break;
lines.Append(line+Environment.NewLine);
count++;
}
}
string myFileData=lines.ToString();
}
OR
public void skip10Lines()
{
int count=0;
List<String> lines=new List<String>();
foreach(var line in File.ReadLines(path))
{
if(count==10)
break;
lines.Add(line);
count++;
}
}
答案 6 :(得分:0)
在Groovy中,一种基于JVM的语言,一种方法是:
def buf = new StringBuilder()
Iterator iter = new File(path).withReader{
for( int cnt = 0;cnt < 9;cnt++){
buf << it.readLine()
}
}
println buf
因为闭包没有“break”,所以循环嵌套在闭包中,因此Groovy运行时会处理资源处理。