使用java编写.ics iCal文件 [英] Writing .ics iCal file using java
问题描述
我正在尝试使用java实现我自己的iCal创建者,由于某种原因,我无法识别我的.ics文件。我想知道我做错了什么我可以获得看起来与维基百科的例子完全一样的输出。 .ics文件和我的程序生成的文件有什么区别。
I am attempting to implement my own iCal creator using java and for some reason I can't get my .ics file to be recognized. I was wondering what I am doing wrong I can get output that looks exactly like the example from wikipedia. What is the difference between the .ics file and the once that my program has generated.
他们的例子:
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
我的.ics文件
BEGIN:VCALENDAR
VERSION:1.0
PRODID://Elara/lofy/tanare/delp/314sum2015//
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
这是用于生成.ics文件的代码。
This is the code used to generate the .ics file.
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class iCal {
private String version = "VERSION:1.0 \n";
private String prodid = "PRODID://Elara/lofy/tanare/delp/314sum2015// \n";
private String calBegin = "BEGIN:VCALENDAR \n";
private String calEnd = "END:VCALENDAR \n";
private String eventBegin = "BEGIN:VEVENT \n";
private String eventEnd = "END:VEVENT \n";
public void iCal(){
}
public void write( String name ){
StringBuilder builder = new StringBuilder();
builder.append(name);
builder.append(".ics");
String testExample = "UID:uid1@example.com\nDTSTAMP:19970714T170000Z\nORGANIZER;
CN=John Doe:MAILTO:john.doe@example.com\nDTSTART:19970714T170000Z
\nDTEND:19970715T035959Z\nSUMMARY:Bastille Day Party\n";
try {
File file = new File(builder.toString());
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(calBegin);
bw.write(version);
bw.write(prodid);
bw.write(eventBegin);
bw.write(testExample);
bw.write(eventEnd);
bw.write(calEnd);
bw.close();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
}
}
推荐答案
显然,vCalendar中的所有行都不允许以空格字符结尾。
Apparently not all the lines in a vCalendar are allowed to end with a space character.
BEGIN:VCALENDAR <- There is a space here
...
BEGIN:VEVENT <- Here too
...
END:VEVENT <- Ditto
END:VCALENDAR <- Last one
如果删除这些空格,您的格式验证。
If you remove those spaces, your format validates.
编辑:此外,来自iCalendar上的维基百科条目:
Edit: Also, from the Wikipedia entry on iCalendar:
每行由CR + LF终止(十六进制:0D0A)。
Each line is terminated by CR+LF (in hexadecimal: 0D0A).
尝试使用 \ r \ n
而不是 \ n
。
这篇关于使用java编写.ics iCal文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!