条件是,如果目录存在,则必须在该特定目录中创建文件,而不创建新目录。
下面的代码只会在新目录下创建一个文件,而不会在现有目录下创建。例如,目录名可能是“GETDIRECTION”:
String PATH = "/remote/dir/server/";
String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt");
String directoryName = PATH.append(this.getClassName());
File file = new File(String.valueOf(fileName));
File directory = new File(String.valueOf(directoryName));
if (!directory.exists()) {
directory.mkdir();
if (!file.exists() && !checkEnoughDiskSpace()) {
file.getParentFile().mkdir();
file.createNewFile();
}
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();
字符串
9条答案
按热度按时间p5cysglq1#
Java 8+版本:
字符串
Files.createDirectories()
创建一个新目录和不存在的父目录。如果目录已经存在,此方法不会抛出异常。bvhaajcl2#
这段代码首先检查目录是否存在,如果不存在,就创建它,然后创建文件。请注意,我无法验证你的一些方法调用,因为我没有你的完整代码,所以我假设对
getTimeStamp()
和getClassName()
的调用可以工作。你还应该对可能的IOException
做一些事情,当使用任何java.io.*
类-您编写文件的函数应该抛出此异常(它可以在其他地方处理),或者你应该直接在方法中处理它。另外,我假设id
是String
类型-我不知道,因为你的代码没有显式定义它。如果它是类似int
的其他类型,在fileName中使用它之前,你可能应该将它转换为String
,就像我在这里所做的那样。此外,我将您的
append
调用替换为concat
或+
。字符串
如果你想在Microsoft Windows上运行代码,你可能不应该使用这样的裸路径名--我不确定它会对文件名中的
/
做什么。为了完全的可移植性,你可能应该使用像File.separator这样的东西来构造路径。directory.mkdir()
调用创建了目录,则返回true
,如果没有,则返回false
,包括目录已经存在的情况。uhry853o3#
尝试使这尽可能的短和简单。如果它不存在,则创建目录,然后返回所需的文件:
字符串
btxsgosb4#
我想为Java8+提供以下建议。
字符串
编辑:更新以修复@Cataclysm和@Marcono1234所指出的错误。Thx guys:)
vdzxcuhz5#
使用
java.nio.Path
的简单解决方案字符串
3gtaxfhh6#
验证码:
字符串
lyfkaqu17#
如果你创建一个基于web的应用程序,更好的解决方案是检查目录是否存在,如果不存在,则创建文件。如果存在,则重新创建。
字符串
csbfibhn8#
使用Java 8的简单解决方案
字符串
w80xi6nr9#
如果你使用的是Java 8或更高版本,那么
Files.createDirectories()
方法效果最好。