条件是如果目录存在,则必须在该特定目录中创建文件而不创建新目录。
以下代码仅使用新目录创建一个文件,而不是为现有目录创建一个文件。例如,目录名称类似于“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();
此代码首先检查目录是否存在,如果不存在则创建它,然后创建文件。请注意,由于我没有您的完整代码,因此我无法验证您的某些方法调用,因此我假设对诸如此类的调用getTimeStamp()会getClassName()起作用。您还应该对IOException使用任何java.io.*类时可能抛出的可能性做一些事情 - 编写文件的函数应该抛出这个异常(并且它在其他地方处理),或者您应该直接在方法中进行。另外,我认为这id是类型String- 我不知道,因为您的代码没有明确定义它。如果它是类似 a 的其他东西int,您可能应该String像我在这里所做的那样在 fileName 中使用它之前将其转换为 a 。
getTimeStamp()
getClassName()
IOException
java.io.*
id
String
int
另外,我用我认为合适的or替换了您的append电话。concat``+
append
concat``+
public void writeFile(String value){ String PATH = "/remote/dir/server/"; String directoryName = PATH.concat(this.getClassName()); String fileName = id + getTimeStamp() + ".txt"; File directory = new File(directoryName); if (! directory.exists()){ directory.mkdir(); // If you require it to make the entire directory path including parents, // use directory.mkdirs(); here instead. } File file = new File(directoryName + "/" + fileName); try{ FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(value); bw.close(); } catch (IOException e){ e.printStackTrace(); System.exit(-1); } }
如果你想在 Microsoft Windows 上运行代码,你可能不应该使用这样的裸路径名——我不确定它会如何处理/文件名中的 。为了完全可移植,您可能应该使用File.separator之类的东西来构建您的路径。
/
编辑 :根据下面的评论,没有必要测试目录是否存在。如果它创建了一个目录,则directory.mkdir()调用将返回,如果没有,包括目录已经存在的情况。true``false
directory.mkdir()
true``false