Java 创建ObjectOutputStream时将ArrayList保存到文件-FC

Java 创建ObjectOutputStream时将ArrayList保存到文件-FC,java,android,file,caching,Java,Android,File,Caching,我试图在我的应用程序中实现一些简单的缓存,但我遇到了一些问题 基本上,我的代码会抓取一个网页,获取一些正则表达式匹配项并将它们放入ArrayList中。这需要一段时间(几秒钟,但这种情况经常发生),因此我正在尝试实现一个简单的缓存系统,它会检查缓存文件何时被修改,如果时间超过一周,请刷新缓存 我的问题在于存储ArrayList,有人能帮忙吗 我原来有(哪个有效) 指向 save = new ObjectOutputStream(saveFile); 我有 android.permission.

我试图在我的应用程序中实现一些简单的缓存,但我遇到了一些问题

基本上,我的代码会抓取一个网页,获取一些正则表达式匹配项并将它们放入ArrayList中。这需要一段时间(几秒钟,但这种情况经常发生),因此我正在尝试实现一个简单的缓存系统,它会检查缓存文件何时被修改,如果时间超过一周,请刷新缓存

我的问题在于存储ArrayList,有人能帮忙吗

我原来有(哪个有效)

指向

save = new ObjectOutputStream(saveFile);
我有 android.permission.WRITE\u外部存储

在我的舱单上

我已经尝试将文件名改为静态文件名(1),而不是我的url.getQuery,以防出现问题-不改变任何内容,完全相同的问题


我觉得我犯了一个根本性的错误。有人能看到我在保存/读取ArrayList时哪里出了问题吗?

似乎找不到您的保存文件;但很难说,因为您的代码目前正在吞并所有异常。而不是:

try {
    saveFile = new FileOutputStream(cacheDir + "PL"+url.getQuery())
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
尝试记录您的异常,因为e.printStackTrace();在android上默认情况下不做任何事情

catch(FileNotFoundException e1) {
  Log.e(getClass().getName(), "File not found:" + cacheDir + "PL" + url.getQuery()", e1);
}

无论如何,这是我的理论-您的文件路径指向某个由于任何原因无法写入的地方(有一些可能的解释);然后,saveFile以null的形式从异常中出来,然后当我在OP my logcat中提到的崩溃发生时,将null参数传递到outputStream构造函数中

Post日志语句中。它为我提供了一个来自另一个项目的NullPointerException。当我复制一个项目时,这种情况经常发生。但是,当此项目正常工作时,其他项目没有错误。由于我不知道为什么会发生这种情况,也不知道如何解决,我希望有人能看到我可能犯下的一个明显错误,我发现了一个明显的错误:没有重点问题,甚至没有有用的异常/调试信息发布到SO。如果你想要另一双眼睛,试试“代码审查”网站。:-)基本上,如果这个问题不能在标题中得到充分的总结,它就不属于这里。这在像这个.Pst这样的场景中很有帮助-我想我已经充分描述了我的问题,我还解释了为什么我无法提供堆栈跟踪。劳努克,谢谢你的建议,我试过了。它没有起作用。当我复制一个项目来测试代码时,似乎总是会发生。谢谢。现在,这将导致“04-04 20:36:05.958:E/com.test.test.VideoGrid(3777):java.io.FileNotFoundException:/data/plplpl8f5a29f57db58fcb:open失败:EACCES(权限被拒绝)”。我在互联网上几乎找不到关于这个问题的信息,这似乎不是一个实际的权限错误(我已经尝试了所有相关的)@citizensimf你使用
getDataDirectory()
而不是
getExternalStorageDirectory()
?结果是有两个不同的错误,主要原因是我使用了错误的文件名,而产生错误的原因是我试图错误地写入外部存储器。你的回答让我解决了这个问题。非常感谢,小约翰
com.test.test.VideoGrid.getVideoIDS(VideoGrid.java:204)
save = new ObjectOutputStream(saveFile);
try {
    saveFile = new FileOutputStream(cacheDir + "PL"+url.getQuery())
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
catch(FileNotFoundException e1) {
  Log.e(getClass().getName(), "File not found:" + cacheDir + "PL" + url.getQuery()", e1);
}