读取文件并用Java编辑它

时间:2009-09-10 08:18:57

标签: java edit

我正在做的是我正在读取一个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:无法创建新的本机线程,

无法截断表格,

EXCEPTION:无法打开与服务器的连接:SQLExceptio,

Caught IOException:java.io.IOException:JZ0C0:Connection已经关闭,...

我不确定为什么我会得到这些或所有这些意味着什么?

请帮助。

5 个答案:

答案 0 :(得分:4)

应该很简单:

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

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

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 :(得分:1)

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

答案 2 :(得分:1)

forum thread有一些如何做的想法。 GL。

答案 3 :(得分:0)

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

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

至少你肯定不会破坏HTML文档结构。

答案 4 :(得分:0)

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

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

-Xmx1024m

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

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

其他IOExceptions相当不言自明。由于SQLException,您的程序无法与服务器建立连接(可能会在日志中找到基础异常本身);程序的其他一些部分试图使用封闭连接与远程机器通信。

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