stanza是ipod/iphone上的免费读书软件,功能非常实用。最近由于我的ipod系统出现问题,想导出stanza下载的电子书后重装系统,结果折腾了好久。
在stanza官网上搜索了下,发现很多人都有和我一样的需求,作者也适时推出了
Stanza Book Restore Tool,我立马下载回来。这个工具是从ipod备份(通过itune备份)中导出stanza电子书。但是我一运行这个工具就提示我RE:java.lang.IllegalArgumentException: Cannot find backup folder错误。
会不会是这个工具不支持中文目录呢?我把itunes备份目录copy到c:根目录下。结果还是一样的错误提示,这下没辙了。重新回到stanza官网搜索,发现了这篇文章
http://www.lexcycle.com/node/1864。摘录如下
This "can't find" problem is due to the checks for "backupFolder.length() == 0" in StanzaBookRestore.run(). That File.length() call will always return 0 for a folder/directory under Java 1.6.0 (on my Windows XP machine, anyway).
So, no matter what backup folder I pick, the code always thinks it is invalid and "over smartifies" and calls getDefaultBackupFolder(), which makes backupFolder = "Backup" ... which is NOT what I asked for. (I prefer software to just tell me when I input an invalid value instead of trying to do invisible "smart" things for me. Makes finding bugs like this easier.)
Anyway, I just removed all checks for backupFolder.length() == 0 from StanzaBookRestore.run(), and it seems to work fine.
这个解决办法是要修改stanzabookrestore.jar中的StanzaBookRestore.java文件,将StanzaBookRestore.run()函数中的所有backupFolder.length() == 0条件检查去掉。据说是Windows下才有这个问题。
以前我可没有编译过java。只好下载了java jdk以及XJad反编译工具。先用XJad反编译stanzabookrestore.jar,然后安装jdk,修改StanzaBookRestore.java并重新编译为jar。要说明的一点是,stanzabookrestore.jar中已经带有所有java源文件了。XJad反编译后的java文件编译时有点小问题,我是直接从作者的源文件替换、修改后重新编译的。
说说java的编译过程。
1.执行javac ????.java生成 ????.class
2.建一个manifest.mf 文件用来申明main函数所在类,这里可以直接用作者原来的manifest.mf
3.用jar 打包class文件。
先将所有class文件copy到classes文件夹,然后在上一级目录下建一个myjar.bat文件,内容如下:
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_21
set PATH=%JAVA_HOME%\bin
set CLASSPATH=%JAVA_HOME%\lib\tools.jar;
jar cvfm stanzabookrestore.jar MANIFEST.MF -C classes/ .
运行myjar.bat就重新生成了stanzabookrestore.jar.
没想到搞个stanza电子书的备份居然要学习java的编译。不过也许以后还用得着,先记在这里吧。
重新编译后的在这里
http://www.cppblog.com/Files/huyutian/stanzabookrestore.zip