秀才坤坤出品

一、epub格式电子书

相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT

包括

1、JAVA项目工程test_epub,里面包括了jar包和一本epub电子书myBook.epub

2、epub相关jar包

3、电子书myBook.epub

epub格式这里就不仔细描述了,这里强调一点,epub格式是压缩格式,只需将后缀改为.zip或.rar,解压即可看到里面的文件内容。

二、JAVA解析.epub格式电子书,具体实现代码如下。写了一个简单helloWorld程序,加入了相应的jar包。

程序说明:

1、读取epub/myBook.epub文件。

2、修改metaData中的title

3、输出新的.epub文件到工程目录下。文件名mynewbook.epub

通过解压mynewbook.epub文件,可以看到toc.ncx文件中的<docTitle>和content.opf中的<dc:title>标签内容都进行了修改。

  1. package com.hk;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. import nl.siegmann.epublib.domain.Book;
  13. import nl.siegmann.epublib.epub.EpubReader;
  14. import nl.siegmann.epublib.epub.EpubWriter;
  15.  
  16. public class Test {
  17.  
  18. public static void main(String[] args) {
  19. System.out.println("hello world");
  20.  
  21. EpubReader epubReader = new EpubReader();
  22.  
  23. //处理io流路径
  24. String currentPath = Thread.currentThread().getClass().getResource("/").toString();
  25. String epubPath = currentPath + "epub/myBook.epub";
  26. epubPath = epubPath.substring(6, epubPath.length());
  27. epubPath = epubPath.replace("/", "//");
  28. System.out.println(epubPath);
  29.  
  30. //读epub文件
  31. Book book = null;
  32. try {
  33. InputStream inputStr = new FileInputStream(epubPath);
  34. book = epubReader.readEpub(inputStr);
  35. } catch (FileNotFoundException e) {
  36. e.printStackTrace();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40.  
  41. //设置epub文件内title.
  42. //本处修改了toc.ncx文件中的<docTitle>和content.opf中的<dc:title>标签内容.
  43. List<String> titlesList = new ArrayList<String>();
  44. titlesList.add("test book");
  45. book.getMetadata().setTitles(titlesList);
  46.  
  47. //write epub
  48. EpubWriter epubWriter = new EpubWriter();
  49. try {
  50. OutputStream ouput = new FileOutputStream("mynewbook.epub");
  51. epubWriter.write(book, ouput);
  52. } catch (FileNotFoundException e) {
  53. e.printStackTrace();
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57.  
  58. }
  59.  
  60. }

如有不明白和写的不对的地方,敬请评论。

Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包的更多相关文章

  1. PDF转EPUB格式电子书经验总结

    依据本人将PDF转换为EPUB电子书的经验,总结整理了这篇文章.因本人水平有限,难免有错误和不足之处,望大家及时批评指正.   写这篇文章时,假定读者已经会使用文中所列出软件的基本操作,比方如何用No ...

  2. Java语言入门-第一个HelloWorld程序

    1.官网下载Jdk 这里给出官网下载网址:https://www.oracle.com/technetwork/java/javase/downloads . 1.1 打开之后出现如下界面: 1.2选 ...

  3. java 解析json格式数据(转)

    2012-07-30 16:43:54|  分类: java |  标签:java  json  |举报|字号 订阅     有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到 ...

  4. JAVA学习之第一个HelloWorld程序

    第一个HelloWorld程序 第一步,创建java类型的文件 第二步,在创建文件的目录中打开cmd窗口 第三步,使用javac 命令将java文件编译为.class类型的字节码文件 第四步,使用ja ...

  5. java 解析json格式数据

    有时候可能会用到json格式进行数据的传输,那么怎么把接收到的数据解析出来呢? 下面介绍两种解析json数据的方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = { ...

  6. 以jar包为容器的java程序访问一同打到jar包里的配置文件的方法

    Java程序有时会被打到jar包里执行,同时src/main/resources里一些配置文件也会被打进去. 比如,src/main/resources下有一个box目录,里面有几个json文件,用m ...

  7. java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载

    从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...

  8. Java中使用com.sun相关jar包出现编译错误,但是运行没有错误的解决方法和原因

    [解决方法]如果你用的是Eclipse 在preference->java->complier->errors/warning->deprecated and restrict ...

  9. eclipse导出附带源码的jar包

    最近在搞Andengine游戏开发,发现andengine的jar包可以直接点击查看源码,而其他项目的jar包却看不了,因此自己研究了下如何生成可以直接查看源码的jar包. 1.eclipse中点击项 ...

随机推荐

  1. bzoj 2555: SubString 后缀自动机+LCT

    2555: SubString Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 688  Solved: 235[Submit][Status][Dis ...

  2. PHP漏洞全解(三)-客户端脚本植入

    本文主要介绍针对PHP网站的客户端脚本植入攻击方式.所谓客户端脚本植入攻击,是指将可以执行的脚本插入到表单.图片.动画或超链接文字等对象内.当用户打开这些对象后,黑客所植入的脚本就会被执行,进而开始攻 ...

  3. php和.net的DES加密解密方法

    .net版本 /// <summary> /// DES加密 /// </summary> /// <param name="pToEncrypt"& ...

  4. Codeforces Round #236 (Div. 2)

    A. Nuts time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputoutput:st ...

  5. Qt Add ons Modules(听说QtSystem有接口可以获取 imei号)

    http://wiki.qt.io/Qt-Add-ons-Modules 听说QtSystem有接口可以获取 imei号.http://wiki.qt.io/Qt-Add-ons-Modules这儿下 ...

  6. Subline Text默认设置文件Preferences.sublime-settings—Default详解

    Subline Text中,点击Preferences,选择Settings - Default 全部属性解析 // While you can edit this file, it's best t ...

  7. Import data from SQLServer with Sqoop

    author: luciuz date: 2013/11/15 -------------------------------------------------------------------- ...

  8. 借助 ASR 和 System Center 执行基于 SAN 复制的企业级灾难恢复

    Abhishek A. Hemrajani 云 + Enterprise项目经理 对于Azure Site Recovery,我们的优先级已经提升为每个人都可以在任意地点获取易于使用的灾难恢复 (DR ...

  9. ACM ICPC Asia Regional 2011 Kuala Lumpur C题

    看了逆波兰表达式之后,发现真是强悍的数据结构,栈的应用怎么感觉一辈子也学不完了呢 后缀表达式即逆波兰表达式,就是将所有的运算符按照一定的等级全部都安排到数字的后面去,实现正确的运算法则. OK,代码要 ...

  10. CSS3中动画属性transform、transition 和 animation

    CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明:        transform   从字面来看transform的释义为改变,使 ...