Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法创建ePub_Java_Android_Eclipse_Nullpointerexception_Epub - Fatal编程技术网

Java 无法创建ePub

Java 无法创建ePub,java,android,eclipse,nullpointerexception,epub,Java,Android,Eclipse,Nullpointerexception,Epub,我正在尝试在android中创建一个ePub文件。下面是我的源代码 但是我在 epubWriter.写(书,出) 我已经将cover.png和test1.html放在资产文件夹中 关于*.css,mimetype,META-INF/container.xml,OEBPS/*.opf,*.otf文件呢 他们是否必须构建ePub文件 我能够创建一个文件,但它的格式不正确,我想当我从设备中取出该文件并尝试以的口径查看它时,它不会通过给出以下错误来打开 calibre,版本0.8.38 错误:无法打开电

我正在尝试在android中创建一个ePub文件。下面是我的源代码

但是我在

epubWriter.写(书,出)

我已经将
cover.png
test1.html
放在资产文件夹中

关于
*.css
mimetype
META-INF/container.xml
OEBPS/*.opf
*.otf
文件呢

他们是否必须构建ePub文件

我能够创建一个文件,但它的格式不正确,我想当我从设备中取出该文件并尝试以的口径查看它时,它不会通过给出以下错误来打开

calibre,版本0.8.38
错误:无法打开电子书:文件不是zip文件

我是ePub开发的绝对初学者,因此任何帮助/建议都将不胜感激

createPub.java

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();
        }
    }
}
LogCat

 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)
at nl.siegmann.epublib.epub.EpubWriter.write(EpubWriter.java:53)
at com.createepub.CreateEPub.onCreate(CreateEPub.java:91)
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)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

注意CreatePub第91行指的是
epubWriter.write(book,out)

我希望您正在使用西格曼库创建ePub

需要包括2个lib文件(必需)

  • epublib-core-latest.jar
  • slf4j-android-1.6.1-RC1.jar
  • 从下载两个jar

    示例代码

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import nl.siegmann.epublib.domain.Author;
    import nl.siegmann.epublib.domain.Book;
    import nl.siegmann.epublib.epub.EpubWriter;
    import android.app.Activity;
    import android.os.Bundle;
    
    
    
    public class EpubAppActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Book b =  new Book();
            b.getMetadata().addTitle("test epub book");
            b.getMetadata().addAuthor(new Author("author name"));
    
           EpubWriter w = new EpubWriter();
    
            FileOutputStream fos;
            try {
    
                File file = new File(getApplicationContext().getExternalFilesDir(null), "test.epub");
                if(!file.exists()){
                    file.createNewFile();
                }
                fos = new FileOutputStream(file);
                w.write(b, fos);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
        }
    }
    

    谢谢你的答复。当我尝试您建议的代码时,它给出了“calibre,版本0.8.38错误:无法打开电子书:此EPUB的书脊中没有有效条目”。。。可能有什么问题?你是如何打开epub的书的。你在用什么工具吗?是的。我正在使用
    Calibre
    。我下载了一个ePub文件,并用
    Calibre
    打开了它,它可以正常工作。但是当我试图打开由此代码创建的文件时,它不起作用