有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java/Android崩溃ApacheCommonsio2。4.jar

我试图使用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()调用,错误永远不会发生,代码在任何地方都可以正常运行

使用EclipseIndigo在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 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE" /> 但还是不行

编辑3- 我开始考虑apache commons-io-2.4。jar天生不适合Android。是吗

编辑4- 如果有人想尝试一下,这是我的代码。它是在Windows7、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)我将它导入到我的程序中

这是怎么回事


共 (2) 个答案

  1. # 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())
    }
    
  2. # 2 楼答案

    虽然该程序在complier中成功运行,但在android设备中运行时程序崩溃。因为在运行期间,它只检查android依赖项中的jar文件。我也有类似的问题。我在preferences/properties中解决了这个问题->;java构建。勾选外部jar文件