Java:操作以文本形式保存在 Clob/Blob 中的 docx 文档

标签 java mysql jdbc apache-tika

我有一个 Word 文档保存在 Oracle Clob 或 mysql Blob 中,我编写了以下代码来从 DB 读取 --> 保存到 .docx --> 操作 docx 文档中的文本。我的问题是有什么方法可以操作 docx 文档中的文本而不在 docx 文档上写入数据吗? 谢谢:)

private static String url = "jdbc:mysql://localhost/test";
private static String username = "root";
private static String password = "root";




public static void main( String[] args) throws ClassNotFoundException, SQLException, IOException
{
     Connection conn = null;

      Class.forName("com.mysql.jdbc.Driver");
      conn = DriverManager.getConnection(url, username, password);

      String sql = "SELECT name, description, data FROM documents ";
      PreparedStatement stmt = conn.prepareStatement(sql);
      ResultSet resultSet = stmt.executeQuery();
      while (resultSet.next()) {
          String name = resultSet.getString(1);
          System.out.println("Name        = " + name);
          String description = resultSet.getString(2);
          System.out.println("Description = " + description);

          //
          // Get the character stream of our CLOB data
          //
          Blob blob = resultSet.getBlob(3);
         // System.out.println(convertLOB(blob));//convertLOB(blob).toString());
          OutputStream fwriter = new FileOutputStream("C:\\The Appfuce Primer.docx");
         readFromBlob(blob,fwriter);

    String target = "C:\\The Appfuce Primer.docx";

    File document = new File(target);
    Parser parser = new AutoDetectParser();

    ContentHandler handler = new BodyContentHandler();
    Metadata metadata = new Metadata();

    try {
      parser.parse(new FileInputStream(document), handler, metadata, new ParseContext());


    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (TikaException e) {
      e.printStackTrace();
    }

    System.out.println(metadata);
    System.out.println(handler.toString());
      }
}
      final static int bBufLen = 4 * 8192;
      public static long readFromBlob(Blob blob, OutputStream out)
               throws SQLException, IOException {
                 InputStream in = blob.getBinaryStream();
                 int length = -1;
                 long read = 0;
                 byte[] buf = new byte[bBufLen];
                 while ((length = in.read(buf)) != -1) {
                     out.write(buf, 0, length);
                     read += length;
                 }
                 in.close();
                 return read;
             }

最佳答案

您可以使用 Apache POI 项目来访问 .docx 文档的内容。

https://poi.apache.org/document/quick-guide-xwpf.html

关于Java:操作以文本形式保存在 Clob/Blob 中的 docx 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35558945/

相关文章:

mysql - 运行 MySQL 脚本 - 零知识

php - MYSQL 3个表排序

php - Mysql插入数据为double类型

java - 何时关闭 JDBC 中的 Connection、Statement、PreparedStatement 和 ResultSet

java - 带有用于启动/停止的 Maven 插件的轻量级 Java 数据库?

java - Spring 存储库和 DATA_FORMAT 与 nativeQuery=false

java - 为什么我需要调用 junit.textui.TestRunner? ( java )

java - 如何连接多个 Textview,这些 Textview 是一个单词,就像所有 TextView(单词)合并为段落一样

java - 如果我们在实体类的getter和setter中添加逻辑是不是不好的设计

java - 使用 DAO Spring MVC 将行插入多个表