Чтение файла и редактирование его в Java - PullRequest
0 голосов
/ 10 сентября 2009

То, что я делаю, я читаю в html-файле и ищу определенное место в html, чтобы я мог ввести какой-то текст. Поэтому я использую bufferedreader для чтения в HTML-файл и разделить его по тегу. Я хочу ввести текст перед этим, но я не уверен, как это сделать. В таком случае html будет выглядеть следующим образом ... (newText) (/ HEAD) (круглые скобки должны быть угловыми скобками. Не знаю, как их вставить)

Нужен ли мне PrintWriter для того же файла, и если да, то как бы я сказал это, чтобы написать его в правильном месте. Я не уверен, какой способ будет наиболее эффективным, чтобы сделать что-то подобное. Пожалуйста, помогите.

Заранее спасибо.


Вот часть моего кода Java:

        File f = new File("newFile.html");
        FileOutputStream fos = new FileOutputStream(f);
        PrintWriter pw = new PrintWriter(fos);


        BufferedReader read = new BufferedReader(new FileReader("file.html"));
        String str;
        int i=0;
        boolean found = false;
        while((str= read.readLine()) != null)
        {

            String[] data = str.split("</HEAD>");


            if(found == false)
            {
                pw.write(data[0]);
                System.out.println(data[0]);
                pw.write("</script>");
                found = true;
            }
            if(i < 1)
            {
            pw.write(data[1]);
            System.out.println(data[1]);
            i++;
            }
            pw.write(str);
            System.out.println(str);


        }
      }
      catch (Exception e) {
        e.printStackTrace( );
        }

Когда я делаю это, он попадает в точку в файле, и я получаю следующие ошибки:

ФАТАЛЬНАЯ ОШИБКА: MERLIN: невозможно подключиться к EDG API,

Не удается найти файл .edg_properties.,

java.lang.OutOfMemoryError: невозможно создать новый собственный поток,

Невозможно усечь таблицу,

ИСКЛЮЧЕНИЕ: не удается открыть соединение с сервером: SQLExceptio,

Поймано IOException: java.io.IOException: JZ0C0: Соединение уже закрыто, ...

Я не уверен, почему я получаю это или что все это значит?

Пожалуйста, помогите.

Ответы [ 5 ]

4 голосов
/ 10 сентября 2009

Должно быть довольно просто:

  • Чтение файла в строку
  • Разделить на части до / после
  • Открыть временный файл для записи
  • Пишите до чанка, ваш текст, после чанка
  • Закрыть и переместить временный файл в исходное

Звучит так, будто вы задаетесь вопросом о последних двух шагах, в частности. Вот необходимый код:

File htmlFile = ...;
...
File tempFile = File.createTempFile("foo", ".html");
FileWriter writer = new FileWriter(tempFile);
writer.write(before);
writer.write(yourText);
writer.write(after);
writer.close();
tempFile.renameTo(htmlFile);
1 голос
/ 10 сентября 2009

В теме форума есть несколько идей, как это сделать. GL.

1 голос
/ 10 сентября 2009

Большинство людей предлагают записать во временный файл и затем скопировать временный файл поверх оригинала при успешном завершении.

0 голосов
/ 10 сентября 2009

Следуя списку ошибок в вашем редактировании, многие из них, возможно, связаны с ошибкой OutOfMemoryError. Это означает, что вам просто не хватило памяти в JVM, поэтому Java не смогла выделить объекты. Это может быть вызвано утечкой памяти в вашем приложении или просто тем, что работа, которую вы пытаетесь выполнить, требует временной памяти больше, чем вы ее выделили.

Вы можете увеличить объем памяти, с которой запускается JVM, предоставив аргумент Xmx для исполняемого файла java, например ::

-Xmx1024m

установит максимальный размер кучи в 1024 мегабайта.

Другие проблемы могут быть вызваны этим; когда объекты не могут быть надежно созданы или изменены, происходит много странных вещей. Тем не менее, есть несколько вещей, которые выглядят так, будто вы можете действовать. В частности, независимо от того, что MERLIN выглядит, он не может выполнять свою работу, поскольку ему нужен файл свойств для EDG, который он не может найти в расположении, которое ищет. Вам, вероятно, придется либо поместить туда файл конфигурации, либо попросить его посмотреть в другом месте.

Остальные IOException являются довольно очевидными. Ваша программа не смогла установить соединение с сервером из-за SQLException (само исключение, вероятно, будет найдено в журналах); и какая-то другая часть программы пыталась установить связь с удаленным компьютером, используя закрытое соединение.

Я бы посмотрел на исправление файла свойств (если это не доброкачественная ошибка) и сначала проблемы с памятью, а затем посмотрел, все ли еще остаются проблемы.

0 голосов
/ 10 сентября 2009

Для чтения и записи вы можете использовать FileReaders / FileWriters или соответствующие классы потоков ввода-вывода.

Для редактирования я бы предложил использовать HTML-парсер для обработки документа. Он может считывать HTML-документ во внутреннюю структуру данных, что упрощает ваши усилия по поиску контента и внесению изменений. (Большинство?) Парсеры могут снова сериализовать документ в HTML.

По крайней мере, вы уверены, что не повредите структуру документа HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...