Этот код, который я запрограммировал, намного быстрее для очень больших файлов:
public String readDoc(File f) {
String text = "";
int read, N = 1024 * 1024;
char[] buffer = new char[N];
try {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while(true) {
read = br.read(buffer, 0, N);
text += new String(buffer, 0, read);
if(read < N) {
break;
}
}
} catch(Exception ex) {
ex.printStackTrace();
}
return text;
}
Обход. Нужно, так как ответ ljupce подтверждает, что это ошибка в более старых версиях Android.
Так как node.insertBefore(newChild, null)
не работает, но совпадает с node.appendChild(newChild)
, обходной путь состоит в том, чтобы просто вызвать appendChild()
, если в противном случае вы бы вызвали insertBefore()
с параметром null refChild
.
Пример:
// Before
node.insertBefore(newChild, refChild);
// After
if (refChild != null)
node.insertBefore(newChild, refChild);
else
node.appendChild(newChild);
Он может быть воспроизведен даже с 4.1.2. Реализация для insertBefore из org.apache.harmony.xml.dom is
public Node insertBefore(Node newChild, Node refChild) throws DOMException {
LeafNodeImpl refChildImpl = (LeafNodeImpl) refChild;
if (refChildImpl.document != document) {
throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, null);
}
if (refChildImpl.parent != this) {
throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null);
}
return insertChildAt(newChild, refChildImpl.index);
}
Как вы можете видеть, никто не проверяет, является ли refChildImpl
нулевым, refChildImpl.document!=document
throws NullPointerException
Эта реализация не имеет никакого смысла, если верно следующее
Описание org.w3c.dom.Node.insertBefore Android-SDK говорит следующее:
public abstract Node insertBefore (Node newChild, Node refChild)
Вставляет узел newChild перед существующим дочерним узлом refChild. Если refChild имеет значение null, добавьте newChild в конец списка дочерних элементов.
blockquote>
Добавьте doc!=null
в оператор if. Кажется, ваш объект doc имеет значение null.