.ICS文件未显示在文件夹中

时间:2018-12-21 14:45:22

标签: android icalendar android-calendar

我编写了一个小代码,用于在带有目录的外部存储中以.ics格式创建文件。 现在问题是.ics文件没有显示在目录中。当我将其更改为.txt格式时,它将显示出来。这段代码怎么了?

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR    

String begin = "BEGIN:VCALENDAR";

public void generateNoteOnSD(Context context) {
    try {
        String filename = "TEST.ics";
        FileOutputStream bw = openFileOutput(filename, MODE_PRIVATE);
        byte b[] = begin.getBytes();
        bw.write(b);
        bw.close();
        Log.d("successful", "written complete");
        Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

缺陷在于您的逻辑。

如果目录ICS已经存在,则您正在尝试写入该目录中的文件TEST.ics。这应该工作。如果没有,您应该得到一个IOException并查看其堆栈跟踪。

问题是目录是否不存在。在这种情况下,您的代码将创建目录,然后再执行其他操作。它还不会检测目录创建是否成功。因此不会创建文件。

相反,您需要进行两项更改:

  • directoryDIR.mkdir()返回一个boolean,以指示目录创建是否成功。您需要检查此返回值,并在收到false时向用户报告。
  • 用于写入文件的代码不应放在else部分中。相反,不应该有else部分,并且代码应该紧跟在if语句之后,即紧接在它的}大括号之后。