我正在尝试使用org.apache.commons.io.FileUtils
静态方法将字符串中的值保存到本地系统上的文件中writeStringToFile
。
因此,首先我下载了 commons-io-2.4.jar 及其 javadocs 和源代码,并通过 Java Build Path 将其导入到我的 Eclipse 项目中。一切都编译得很好。
但是,当我添加简单的行时:
org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File(Environment.getExternalStorageDirectory().toString() + "/logt.txt"), rslt.toString());
程序崩溃。但是,它不会在该声明附近崩溃。相反,它在包含调用此函数的方法的 Object 的构造函数处崩溃。
换句话说
- 在我的代码前面,我创建了一个对象 TranslateTask,
- 其中恰好包含一个函数调用 doTranslate()。
- writeStringToFile 调用是在 doTranslate() 调用中进行的,
- 然而,当我实例化一个 TranslateTask 对象时,实际的崩溃就发生了。
- 但是,当我注释掉对 writeStringToFile() 的调用时,崩溃永远不会发生
- 即使崩溃没有发生在 doTranslate() 调用中......
- 所以,当我实例化一个包含它的对象时,仅仅提到 writeStringToFile() 就会使我的程序崩溃。
为了让它更简单,我在一个Try, catch (RejectedExecutionException e)
块中实例化了对象,但程序在这部分崩溃了:
PathClassLoader.findClass(String) line: 243 **Last call in the stack**
PathClassLoader(ClassLoader).loadClass(String, boolean) line: 573
PathClassLoader(ClassLoader).loadClass(String) line: 532
Translate$4.run() line: 159 **Crash happens here where I instantiate a TranslateTask object**
所以 PathClassLoader... 不知道如何调试这个。我所知道的是,如果我取消org.apache.commons.io.FileUtils.writeStringToFile()
调用,则错误永远不会发生,并且代码在任何地方都可以正常运行。
使用 Eclipse Indigo 在 Android 的 API8/10 上运行它。
编辑-Logcat:
08-07 18:40:11.409:I/System.out(1395):调试器已解决 (1363)
08-07 18:40:14.399: W/KeyCharacterMap(1395): id 0 没有键盘
08-07 18:40:14.399:W/KeyCharacterMap(1395):使用默认键盘映射:/system/usr/keychars/qwerty.kcm.bin
不要认为它给出了任何提示,但这就是 logcat 在调试器稳定后给出的全部内容。
EDIT2 - 为了更好地衡量,我刚刚添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
但仍然不行
EDIT3 - 我开始认为 apache commons-io-2.4.jar 本身不适用于 Android。会是这样吗?
EDIT4 - 如果有人想破解它,这是我的代码。它是在 Windows 7 Eclipse Indigo 中制作的。该代码基于“Hello Android”翻译部分。我要做的就是将一些 JSON 提取到一个字符串中并将其保存到我的 sdcard 中。但是,它在这里演变成了这个谜...... https://dl.dropbox.com/u/10790286/Translate.zip(参见 TranslateTask.java 第 111 行)
EDIT5 - 有趣的更新。FileUtils.writeStringToFile(new java.io.File("/mnt/sdcard/logt.txt"), "test");
当我在调试期间手动放入eclipse 表达式框中时,出现以下错误
发生异常:java.lang.NoSuchMethodError
我不明白为什么会出现此错误,因为 1) WriteStringToFile() 函数位于 commons-io 源中。2)我可以实例化一个 FileUtils 对象 3)我将它导入到我的程序中。
这里发生了什么?