java - cal4j - 文件异常的意外结束
问题描述
我目前不知道这里有什么问题,我请求帮助。
我正在生成一个 ics - 文件。但是如果我想打开 ics - File 来获取日历,我会收到以下错误消息:
net.fortuna.ical4j.data.ParserException:第 1 行出错:文件意外结束
这是我的信息:ical4j 版本 3.0.1 Java:8 Build 181
我的 ics 输出 - 文件:
BEGIN:VCALENDAR PRODID:-//Ben Fortuna//iCal4j 1.0//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT DTSTAMP:20180826T165052Z DTSTART:01180905T000000 DTEND:01180905T000000 SUMMARY:ddd TZID:Europe/Berlin UID:1535302250819-9ed0489f-0320 -4a66-8f9c-4af0e62cdedd 结束:事件结束:VCALENDAR
这是我生成calender.ics的代码 - 文件:
public void createEvent(BookingDate bookingDate, Mandatory mandatory, Employee employee)
throws FileNotFoundException, IOException, ParserException, ConstraintViolationException {
// Create a TimeZone
System.setProperty("net.fortuna.ical4j.timezone.cache.impl", MapTimeZoneCache.class.getName());
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
TimeZone timezone = registry.getTimeZone("Europe/Berlin");
VTimeZone tz = timezone.getVTimeZone();
String pathMandatoryFile = null;
String pathEmployeeFile = null;
// Reading the file and creating the calendar
Calendar icsCalendar = null;
FileOutputStream fout = null;
if (bookingDate.isCreateCalendarMandatoryEntry()) {
// timezone = registry.getTimeZone(mandatory.getTimeZone());
pathMandatoryFile = "calendar.ics";
fout = new FileOutputStream(pathMandatoryFile);
try {
FileInputStream fin = new FileInputStream(pathMandatoryFile);
CalendarBuilder builder = new CalendarBuilder();
icsCalendar = builder.build(fin);
} catch (Exception e) {
}
if (icsCalendar == null) {
icsCalendar = createNewCalender(pathMandatoryFile);
}
}
// Creating an event
java.util.Calendar startCal = java.util.Calendar.getInstance(timezone);
startCal.set(java.util.Calendar.YEAR, bookingDate.getStartDate().getYear());
startCal.set(java.util.Calendar.MONTH, bookingDate.getStartDate().getMonth());
startCal.set(java.util.Calendar.DAY_OF_MONTH, bookingDate.getStartDate().getDate());
startCal.set(java.util.Calendar.HOUR_OF_DAY, bookingDate.getStartDate().getHours());
startCal.clear(java.util.Calendar.MINUTE);
startCal.clear(java.util.Calendar.SECOND);
java.util.Calendar endCal = java.util.Calendar.getInstance(timezone);
endCal.set(java.util.Calendar.YEAR, bookingDate.getEndDate().getYear());
endCal.set(java.util.Calendar.MONTH, bookingDate.getEndDate().getMonth());
endCal.set(java.util.Calendar.DAY_OF_MONTH, bookingDate.getEndDate().getDate());
endCal.set(java.util.Calendar.HOUR_OF_DAY, bookingDate.getEndDate().getHours());
endCal.clear(java.util.Calendar.MINUTE);
endCal.clear(java.util.Calendar.SECOND);
net.fortuna.ical4j.model.DateTime dtStart = new DateTime(startCal.getTime());
net.fortuna.ical4j.model.DateTime dtEnd = new DateTime(endCal.getTime());
String eventName = bookingDate.getName();
VEvent meeting = new VEvent(dtStart, dtEnd, eventName);
// add timezone info..
meeting.getProperties().add(tz.getTimeZoneId());
String uidValue = bookingDate.getIdHash();
meeting.getProperties().add(new Uid(uidValue));
// Add the event and print
icsCalendar.getComponents().add(meeting);
CalendarOutputter outputter = new CalendarOutputter();
outputter.output(icsCalendar, fout);
}
private Calendar createNewCalender(String filePath) throws ValidationException, IOException {
// Saving an iCalendar file
FileOutputStream fout = new FileOutputStream(filePath);
Calendar calendar = new Calendar();
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(CalScale.GREGORIAN);
return calendar;
}
任何人都可以帮助我,拜托。
解决方案
推荐阅读
- excel - 输入 excel 数据重叠的 Web 占位符问题
- docker - Nginx 重定向 https->http(反向代理)->port(docker 容器)
- cvxpy - 将优化问题从 CVX 转换为 CVXPY?
- c# - 使用工厂方法创建类型化 HTTP 客户端,ASP.NET Core 2.1
- nginx - NGINX 将所有与 URL 匹配的请求重定向到子域
- corda - 无法使用 IntelliJ IDEA 导入 sumCash
- reactjs - 如何在 redux 操作调度调用中返回一个承诺,以便我可以链接 .then 块?
- javascript - 文本跨度仅在鼠标悬停后呈现
- c++ - 模板类型之间的隐式转换
- jquery - 通过 Reactjs -Jquery 单击时,Unshift 函数会创建其他按钮