Это - гибкий синтаксический анализатор HTML, который создает чтение-запись DOM и поддерживает плоскость XPath или XSLT (Вы на самом деле не должны понимать XPath, ни XSLT для использования его, не волнуйтесь...). Это - библиотека кода.NET, которая позволяет Вам анализировать "из веб-" файлов HTML. Синтаксический анализатор очень терпим с "реальным миром" уродливый HTML. Объектная модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоки).
Этого нельзя избежать, поскольку API java.io.File
зависит от системы. Вы должны использовать правильный случай при работе с файлами в Linux / Unix. На самом деле, мой совет / решение - следовать строгим и переносимым соглашениям во время разработки в Windows (например, использовать только имена файлов в нижнем регистре или, лучше, , использовать точное имя файла при программном доступе к нему ). Честно говоря, я не понимаю, почему вы пытаетесь загрузить Abc.txt
, когда имя файла abc.txt
. Это дурная привычка (наученная тратить слишком много времени на Windows), а не проблема Linux / Unix.
Ну, во-первых, я думаю вам следует подумать о переходе к согласованной схеме именования, а не использовать какое-либо обходное решение.
В любом случае, как насчет чтения всех имен файлов и помещения их в карту , которая содержит имя в нижнем регистре в качестве ключа? Затем вы можете найти правильное имя файла на карте .
Это также позволит вам обнаружить конфликт, например, два файла «FileA.txt» и «FILEA.TXT» в одном каталоге, которые имеют одинаковые представления в нижнем регистре,
Исправьте!
Любая схема, которую вы придумаете, чтобы обойти это исправление, будет хуже в долгосрочной перспективе.
Предполагая, что файлы в Linux имеют смешанный регистр, на этот вопрос нет простого ответа.
Лучшее, что я могу придумать, - это указать в вашем приложении соответствующие каталоги и создать структура данных памяти фактических имен файлов Linux. Затем, чтобы открыть файл без учета регистра, вы разделяете имя пути на компоненты, выполняете поиск в дереве памяти с помощью поиска без учета регистра, добавляете реальное (чувствительное к регистру) имя пути и используете THAT для открытия файла.
Проблема в том, что оно (и действительно ваше приложение) не может справиться со случаем, когда у вас есть (скажем) «foo.txt» И «Foo.txt» в одном каталоге Linux.
Но лучшее решение - это измените свое приложение так, чтобы оно работало с путями с учетом регистра.
Почему вы не можете изменить много файлов? Если количество файлов - единственное, что вас сдерживает, просто напишите небольшой скрипт, который переименует их все в нижний регистр.
Из вашего вопроса неясно, что вызывает изменение регистра ваших файлов. Если все ваши файлы в Linux написаны в нижнем регистре, а в Windows - в смешанном, вы можете просто преобразовать имя файла в нижний регистр, например:
new File(filename.toLowerCase())
Есть решение с ужасной производительностью во время выполнения, но очень простое в реализации:
Замените new FileReader (name)
чем-то вроде
openFile(name);
public FileReader openFile(String name) throws FileNotFoundException {
File dir = (new File(name)).getParentFile();
for (File f : dir.listFiles()) {
if (f.getName().equalsIgnoreCase(name)) {
return new FileReader(f);
}
throw new FileNotFoundException("File not found: " + name);
}
У меня нет скомпилировал этот код, в нем могут быть опечатки и ошибки. Я оставляю их на ваше усмотрение.