huyutian

他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
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。摘录如下

RE:java.lang.IllegalArgumentException: Cannot find backup folder

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
posted on 2010-08-01 10:18 胡雨田 阅读(2200) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理