无法在目录中创建文件 - Java
Can't create file in directory - Java
我想将 HashMap
的所有元素保存在一个文件中。为此,我在一些 google 搜索的帮助下编写了以下代码:
public void saveCalendars() {
try {FileOutputStream fos = new FileOutputStream(CALENDARPATH_STRING);
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
oos.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println("File not found");
try {FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING));
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
oos.close();
fos.close();
} catch (IOException ex) {
System.out.println("Creating: Error initializing stream");
}
} catch (IOException e) {
System.out.println("Save: Error initializing stream");
}
}
与final static String CALENDARPATH_STRING = "C:\Windows\calendars.dat";
。
我认为我可以简单地使用相同的代码,但如果文件尚未创建则使用 FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING));
来创建一个。
不幸的是,它不起作用。第一次做这么省钱的东西,也许你能帮帮我。
一些建议:
- 使用
File.createNewFile
创建一个新文件并验证它的结果
- 在处理 IO 内容时使用
try-with-resources
(我假设您使用 > JDK 7)。您可以在 official site. 上阅读有关此功能的更多信息
您可以避免重复:
File calendarFile = new File(CALENDARPATH_STRING);
try {
if(calendarFile.createNewFile()) {
System.out.println("File not found. New file was created");
}
} catch (IOException e) {
System.out.printf("Can not create file %s\n", CALENDARPATH_STRING);
}
try(FileOutputStream fos = new FileOutputStream(calendarFile);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
} catch (IOException e) {
System.out.println("Save: Error initializing stream");
}
嗯,我看到你的文件路径有问题CALENDAR_PATH_STRING
并使用 new File(CALENDAR_PATH_STRING)
如果找不到特定文件,它将创建一个新文件。同样在本地我可以看到它正在工作。
public void saveCalendars(Map<String, Calendar> calendarRegister) {
try (FileOutputStream fos = new FileOutputStream(new File(CALENDAR_PATH_STRING));
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
for (Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
} catch (IOException e) {
System.out.println("Creating: Error initializing stream");
}
}
我想将 HashMap
的所有元素保存在一个文件中。为此,我在一些 google 搜索的帮助下编写了以下代码:
public void saveCalendars() {
try {FileOutputStream fos = new FileOutputStream(CALENDARPATH_STRING);
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
oos.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println("File not found");
try {FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING));
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
oos.close();
fos.close();
} catch (IOException ex) {
System.out.println("Creating: Error initializing stream");
}
} catch (IOException e) {
System.out.println("Save: Error initializing stream");
}
}
与final static String CALENDARPATH_STRING = "C:\Windows\calendars.dat";
。
我认为我可以简单地使用相同的代码,但如果文件尚未创建则使用 FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING));
来创建一个。
不幸的是,它不起作用。第一次做这么省钱的东西,也许你能帮帮我。
一些建议:
- 使用
File.createNewFile
创建一个新文件并验证它的结果 - 在处理 IO 内容时使用
try-with-resources
(我假设您使用 > JDK 7)。您可以在 official site. 上阅读有关此功能的更多信息
您可以避免重复:
File calendarFile = new File(CALENDARPATH_STRING);
try {
if(calendarFile.createNewFile()) {
System.out.println("File not found. New file was created");
}
} catch (IOException e) {
System.out.printf("Can not create file %s\n", CALENDARPATH_STRING);
}
try(FileOutputStream fos = new FileOutputStream(calendarFile);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
for(Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
} catch (IOException e) {
System.out.println("Save: Error initializing stream");
}
嗯,我看到你的文件路径有问题CALENDAR_PATH_STRING
并使用 new File(CALENDAR_PATH_STRING)
如果找不到特定文件,它将创建一个新文件。同样在本地我可以看到它正在工作。
public void saveCalendars(Map<String, Calendar> calendarRegister) {
try (FileOutputStream fos = new FileOutputStream(new File(CALENDAR_PATH_STRING));
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
for (Calendar elementCalendar : calendarRegister.values()) {
oos.writeObject(elementCalendar);
}
} catch (IOException e) {
System.out.println("Creating: Error initializing stream");
}
}