这是您的最新尝试:
File_path = root + File.separator + day;
File f_dir = new File(File_path);
f_dir.mkdirs();
File file1 = new File(f_dir, File_name);
if (!file1.exists()) {
try {
file1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
OutputStream fos= new FileOutputStream(file1);
如果您向我们展示了完整的堆栈跟踪和错误消息,那么找出问题会更容易些,但我可以想到几种可能性:
1. 您没有检查
f_dir.mkdirs()
返回的值,它很可能会返回
false
以表示未创建目录路径。这可能意味着:
- 目录已经存在。
- 存在某些东西,但它不是一个目录。
- 目录路径的某个部分由于若干可能原因之一而无法创建。
2.
file1.exists()
调用将返回任何给定对象的路径名中存在的内容的
true
。事实上,某些东西存在并不一定意味着您可以将其打开进行写入:
- 它可能是一个目录。
- 应用程序可能没有写入权限的文件。
- 它可能是只读文件系统上的文件。
- 还有其他一些事情。
如果我在写这个,我会写成这样:
File dir = new File(new File(root), day);
if (!dir.exists()) {
if (!dir.mkdirs()) {
System.err.println("Cannot create directories");
return;
}
}
File file1 = new File(dir, fileName);
try (OutputStream fos= new FileOutputStream(file1)) {
...
} catch (FileNotFoundException ex) {
System.err.println("Cannot open file: " + ex.getMessage());
}
我只在需要时尝试创建目录...并检查创建是否成功。
然后,我只是尝试打开文件以进行写入。如果文件不存在,它将被创建。如果无法创建,则FileNotFoundException消息应解释原因。
请注意,我还纠正了您在变量名称选择中所犯的样式错误。
day
是目录还是文件? - ρяσѕρєя KFile file1 = new File(root+ File.separator + day + File.separator + File_name);
或者File file1 = new File(root+ "/" + day + "/" + File_name);
。 - ρяσѕρєя K