Java/Android - 崩溃 - Apache commons-io-2.4.jar

标签 java android apache-commons

我正在尝试使用 org.apache.commons.io.FileUtils 将字符串中的值保存到本地系统上的文件中静态方法writeStringToFile .

因此,首先我下载了​​ commons-io-2.4.jar 及其 javadocs 和源代码,并通过 Java 构建路径将其导入到我的 Eclipse 项目中。一切都编译得很好。

但是,当我添加简单的行时:

org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File(Environment.getExternalStorageDirectory().toString() + "/logt.txt"), rslt.toString());

程序崩溃了。但是,它不会在该声明附近崩溃。相反,它在包含调用此函数的方法的对象的构造函数处崩溃。

换句话说

  • 之前在我的代码中我创建了一个 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): debugger has settled (1363)

08-07 18:40:14.399: W/KeyCharacterMap(1395): No keyboard for id 0

08-07 18:40:14.399: W/KeyCharacterMap(1395): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

不要认为它给出了任何提示,但这就是调试器稳定后 logcat 给出的全部内容。

编辑2- 为了更好地衡量,我刚刚添加了 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 但还是不行

编辑3 - 我开始认为 apache commons-io-2.4.jar 本质上不适用于 Android。会是这样吗?

编辑4 - 如果有人想尝试一下,这是我的代码。它是在 Windows 7、Eclipse Indigo 中制作的。该代码基于“Hello Android”翻译部分。我想做的就是将一些 JSON 提取到字符串中并将其保存到我的 SD 卡中。但是,这里却演变成了这个谜…… https://dl.dropbox.com/u/10790286/Translate.zip (参见 TranslateTask.java 第 111 行)

编辑5 - 有趣的更新。当我手动输入 FileUtils.writeStringToFile(new java.io.File("/mnt/sdcard/logt.txt"), "test");在调试期间进入 Eclipse 表达式框,出现以下错误

An exception occurred: java.lang.NoSuchMethodError

我不明白为什么会收到此错误,因为 1) WriteStringToFile() 函数位于 commons-io 源代码中。 2) 我可以实例化一个 FileUtils 对象 3) 我将它导入到我的程序中。

这是怎么回事?

最佳答案

写入路径 "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())
}

关于Java/Android - 崩溃 - Apache commons-io-2.4.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851795/

相关文章:

Java8 .getMethod() 与::getMethod

java - 如何将值传递给非 Activity 类

java - Android Volley Json 请求 : Parameters not showing

java - 重用 ObjectInputStream 会抛出 StreamCorruptedException

java - NSDate 日期字符串转换为 java.util.date

java - 在 Java 中压缩文件夹时出错 - 此文件包含未关闭的条目

java - BidiMap 同步

c# - .Net 是否有 org.apache.commons.lang.StringEscapeUtils 的实现?

java - 将二叉树转换为排序数组

Android Facebook Video Upload with Graph API - 如何使用 multipart/form-data