在android中创建EPub文件

时间:2012-02-07 10:11:55

标签: android epub filenotfoundexception

我正在尝试在android中创建一个ePub文件。

以下是我的源代码。

但我正在<{1}}

fileNotFoundException

我已将epubWriter.write(book, new FileOutputStream("test1_book1.epub"));cover.png放在资产文件夹中。

是否必须使用相应的 css 文件来构建ePub文件?

我绝对是ePub开发的初学者,所以任何帮助/建议都会受到赞赏。

CreateEPub.java

test1.html

修改

从各种建议中,现在我能够创建一个文件,但格式不正确我想当我从设备中提取该文件并尝试查看它时,它不会打开给出错误它不是zip文件

logcat的

public class CreateEPub extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        AssetManager assetManager = getAssets();

        try {
            Book book = new Book();
            book.getMetadata().addTitle("Epub test book 1");
            book.getMetadata().addAuthor(new Author("Joe", "Tester"));
            InputStream is = assetManager.open("cover.png");
            book.getMetadata().setCoverImage(new Resource(is, "cover.png"));
            // Add Chapter 1
            InputStream is1 = assetManager.open("test1.html");
            book.addSection("Introduction", new Resource(is1, "chapter1.html"));

            EpubWriter epubWriter = new EpubWriter();
            epubWriter.write(book, new FileOutputStream("test1_book1.epub"));
            Log.v("ePub", "Created");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意: java.lang.NullPointerException at org.kxml2.io.KXmlSerializer.attribute(KXmlSerializer.java:473) at nl.siegmann.epublib.epub.PackageDocumentMetadataWriter.writeMetaData(PackageDocumentMetadataWriter.java:93) at nl.siegmann.epublib.epub.PackageDocumentWriter.write(PackageDocumentWriter.java:45) at nl.siegmann.epublib.epub.EpubWriter.writePackageDocument(EpubWriter.java:112) 0at nl.siegmann.epublib.epub.EpubWriter.write(EpubWriter.java:53) at com.createepub.CreateEPub.onCreate(CreateEPub.java:93) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 0at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) 引用CreateEPub.java:93

2 个答案:

答案 0 :(得分:1)

您只能将文件写入内部存储(设备存储器)或外部存储(SD卡),请参阅data-storage。只需打开一个带有任意文件名的FileOutputStream就行不通,因为该文件系统是只读的。

答案 1 :(得分:1)

问题不在于epubwriter而在于FileOutputStream。它需要的String-parameter不是文件的名称,而是文件的路径。查看此处的文档。 http://developer.android.com/reference/java/io/FileOutputStream.html

我建议使用FileOutputStream的文件参数版本。使用getFilesDir()从您的上下文中获取文件,并将您的文件添加到此目录等。请注意权限。如果要在外部存储上写入文件,则应用程序需要适当的权限。

编辑:我无法评论,希望你读到这个。 createepub是一个活动,每个活动都是一个上下文。活动“扩展”上下文。 http://developer.android.com/reference/android/app/Activity.html