Java 无法在android中写入文件

Java 无法在android中写入文件,java,android,filewriter,Java,Android,Filewriter,这让我发疯,因为它应该能工作。我正在尝试将两个字符串的arraylist写入一个文件。请记住,我是在写内部存储,所以清单权限不是这里的问题。这是我的密码: File cacheFile = new File(context.getFilesDir(), getChannelFile(s[0]) + ".cache"); if (!cacheFile.exists()) { try { FileWriter out = new FileWriter(cacheFile);

这让我发疯,因为它应该能工作。我正在尝试将两个字符串的arraylist写入一个文件。请记住,我是在写内部存储,所以清单权限不是这里的问题。这是我的密码:

File cacheFile = new File(context.getFilesDir(), getChannelFile(s[0]) + ".cache");
if (!cacheFile.exists()) {
    try {
        FileWriter out = new FileWriter(cacheFile);
        for (int i = 0; i < titleArray.size(); i++) {
            Log.d(timesArray.get(i), titleArray.get(i));
            out.write(timesArray.get(i) + "#" + titleArray.get(i));
            out.write(System.getProperty("line.separator"));
        }
        out.close();
        } catch (Exception e) {
            Log.e(Ids.TAG, e.getMessage());
    }
}
File cacheFile=新文件(context.getFilesDir(),getChannelFile(s[0])+“.cache”);
如果(!cacheFile.exists()){
试一试{
FileWriter out=新的FileWriter(缓存文件);
对于(int i=0;i

Logcat正好显示了我想要写的内容。但它不会写入文件。执行此代码后,将创建我的文件,但文件大小为0字节。我不知所措,因为没有发现异常,我的
Log.d
显示一切都是正确的。这里缺少什么?

以下代码片段在从activity的onResume方法执行时有效。这当然不是最好的地方,但可以测试

    File cacheFile = new File(getFilesDir(), "test.cache");
    List<String> titleArray = new ArrayList<String>(Arrays.asList("a", "b", "c"));

    if (!cacheFile.exists()) {
        try {
            FileWriter out = new FileWriter(cacheFile);
            for (int i = 0; i < titleArray.size(); i++) {
                out.write(titleArray.get(i));
                out.write(System.getProperty("line.separator"));
            }
            out.close();
        } catch (Exception e) {
            Log.e("Test", e.getMessage());
        }
    }
File cacheFile=新文件(getFilesDir(),“test.cache”);
List titleArray=newarraylist(Arrays.asList(“a”、“b”、“c”));
如果(!cacheFile.exists()){
试一试{
FileWriter out=新的FileWriter(缓存文件);
对于(int i=0;i
我的问题可以引导您找到答案:

  • 您试图从什么上下文编写文件?广播接收机?从活动/服务中尝试
  • 你是从一个背景线程还是主要线程(不应该有任何想象的区别)
  • 你确定你有足够的空间吗?名单有多大?尝试编写一个包含几个字节的非常简单的文件,然后将其读回以确认其工作正常
  • 您是否在不同的设备和/或模拟器上试用过?问题是否依然存在
  • 您正在构建和测试的Android版本是什么

请在关闭编写器之前尝试
out.flush()
。不幸的是
out.flush()
不起作用。更新了我的问题以包含
cacheFile
对象。等等,你是对的,我将
out.flush()
放在
out.close()
的正上方,但放了
out.flush()之后
for
循环中,它起作用了。谢谢真奇怪。它应该作为
out.flush()工作;out.close()除非您遇到异常。试着把这两个词放到
finally
块中。