0

我正在尝试使用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)我将它导入到我的程序中。

这里发生了什么?

4

2 回答 2

1

写入路径"c:\\temp\\logt.txt"不会在 Android 上运行。您可以使用诸如Environment.getExternalStorageDirectory().toString() + "/log.txt"写入 SD 卡之类的东西。

编辑: 以下在我的 Galaxy Nexus 上工作:

try {
  FileUtils.writeStringToFile(new File(Environment.getExternalStorageDirectory(),"log2.txt"), "HelloNow");
} catch (IOException e) {
  Log.e(TAG,e.getMessage())
}
于 2012-08-07T18:24:59.260 回答
0

虽然程序在编译器中成功运行,但程序在 android 设备中运行时崩溃。因为在运行时它只检查 android 依赖项中的 jar 文件。我也有类似类型的问题。我在首选项/属性 - > java build 中解决了它。勾选外部 jar 文件。

于 2012-08-07T18:58:37.127 回答