我正在尝试在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
答案 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