0

我正在做的是我正在阅读一个 html 文件,并且我正在寻找 html 中的特定位置供我输入一些文本。所以我使用缓冲阅读器读取 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: Connection is already closed, ...

我不知道为什么我会得到这些或所有这些是什么意思?

请帮忙。

4

5 回答 5

4

应该很容易:

  • 将文件读入字符串
  • 分成前/后块
  • 打开一个临时文件进行写入
  • 写在块之前,你的文本,块之后
  • 关闭,并将临时文件移动到原始文件

听起来您特别想知道最后几个步骤。这是基本代码:

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);
于 2009-09-10T08:44:37.880 回答
1

论坛主题有一些关于如何做到这一点的想法。总帐。

于 2009-09-10T08:49:23.957 回答
1

大多数人建议写入临时文件,然后在成功完成后将临时文件复制到原始文件上。

于 2009-09-10T08:21:56.880 回答
0

跟进编辑中的错误列表,其中很多可能源于 OutOfMemoryError。这意味着您只是用完了 JVM 中的内存,因此 Java 无法分配对象。这可能是由您的应用程序中的内存泄漏引起的,或者可能只是因为您正在尝试执行的工作确实需要比您分配的内存更多的内存。

java您可以通过向可执行文件提供 Xmx 参数来增加 JVM 启动时使用的内存量,例如:

-Xmx1024m

将最大堆大小设置为 1024 兆字节。

其他问题可能由此引起;当无法可靠地创建或修改对象时,往往会发生许多奇怪的事情。也就是说,有一些事情看起来你可以采取行动。特别是,无论 MERLIN 是什么,它看起来都无法正常工作,因为它需要一个 EDG 的属性文件,而它无法在它正在查找的位置找到该文件。您可能需要将配置文件放在那里,或者告诉它查看另一个位置。

其他 IOExceptions 是不言自明的。由于 SQLException,您的程序无法建立与服务器的连接(底层异常本身可能会在日志中找到);并且程序的其他一些部分尝试使用关闭的连接与远程机器进行通信。

我会先查看修复属性文件(如果它不是良性错误)和内存问题,然后查看是否仍然存在任何剩余问题。

于 2009-09-10T09:18:09.117 回答
0

对于读取和写入,您可以使用 FileReaders/FileWriters 或相应的 IO 流类。

对于编辑,我建议使用HTML 解析器来处理文档。它可以将 HTML 文档读入内部数据结构,从而简化您搜索内容和应用修改的工作。(大多数?)解析器可以再次将文档序列化为 HTML。

至少您确定不会破坏 HTML 文档结构。

于 2009-09-10T08:58:13.203 回答