Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Серьезно задержанное редактирование: при использовании.NET 4.0 или позже
File
, класс имеет новое ReadLines
метод, который лениво перечисляет строки вместо того, чтобы жадно читать их всех в массив как ReadAllLines
. Таким образом, теперь у Вас могут быть и эффективность и краткость с:
var lineCount = File.ReadLines(@"C:\file.txt").Count();
<час> Исходный Ответ
, Если Вы не слишком побеспокоены об эффективности, можно просто записать:
var lineCount = File.ReadAllLines(@"C:\file.txt").Length;
Для более эффективного метода Вы могли сделать:
var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
while (reader.ReadLine() != null)
{
lineCount++;
}
}
Редактирование: В ответ на вопросы об эффективности
причина я сказал, что второе было более эффективным, расценивал использование памяти, не обязательно скорость. Первый загружает все содержание файла в массив, что означает, что это должно выделить, по крайней мере, столько же памяти сколько размер файла. Второе просто циклично выполняет одну строку за один раз, таким образом, она никогда не должна выделять ценность больше чем одной строки памяти за один раз. Это не настолько важно для маленьких файлов, но для больших файлов это могла быть проблема (при попытке найти количество строк в файле на 4 ГБ в 32-разрядной системе, например, где просто нет достаточного адресного пространства непривилегированного режима для выделения массива это большое).
С точки зрения скорости я не ожидал бы там быть много в нем. Возможно, что ReadAllLines имеет некоторые внутренние оптимизации, но с другой стороны этому, вероятно, придется выделить крупный блок памяти. Я предположил бы, что ReadAllLines мог бы быть быстрее для маленьких файлов, но значительно медленнее для больших файлов; хотя единственный способ сказать состоял бы в том, чтобы измерить его с Секундомером или кодировать профилировщика.
Самое легкое:
int lines = File.ReadAllLines("myfile").Length;
Это использовало бы меньше памяти, но вероятно взяло бы дольше
int count = 0;
string line;
TextReader reader = new StreamReader("file.txt");
while ((line = reader.ReadLine()) != null)
{
count++;
}
reader.Close();
Если легким Вы имеете в виду строки кода, которые легко дешифровать, но на неэффективный шанс?
string[] lines = System.IO.File.RealAllLines($filename);
int cnt = lines.Count();
Это - вероятно, самый быстрый способ знать сколько строк.
Вы могли также сделать (в зависимости от того, если Вы буферизуете его в)
#for large files
while (...reads into buffer){
string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);
}
существуют другие многочисленные пути, но одно из вышеупомянутого, вероятно, с чем Вы пойдете.
Вы могли быстро считать его в и увеличить счетчик, просто использовать цикл для постепенного увеличения, ничего не делая с текстом.
считайте возвраты/переводы строки каретки. Я верю в unicode, который они все еще 0x000D и 0x000A соответственно. тем путем можно быть столь эффективными или неэффективными, как Вы хотите и решаете, необходимо ли иметь дело с обоими символами или не
Можно запуститься" туалет .exe" исполняемый файл (идет UnixUtils и не нуждается в установке), выполненный как внешний процесс. Это поддерживает различные методы счета строки (как Unix по сравнению с Mac по сравнению с окнами).