Java创建目录和子目录(如果不存在)

Java创建目录和子目录(如果不存在),java,Java,假设我想创建generatedAnswers目录,其中包含另一个目录dirName,它是我输入的字符串变量 然后我想在目录`generatedAnswers/dirName'中插入fileName,使文件按照以下结构落入dirName目录: / generatedAnswers /dirName fileName.txt 我尝试了以下代码,但不起作用: File file = new File("generatedQuestions/"+dirName+&q

假设我想创建
generatedAnswers
目录,其中包含另一个目录
dirName
,它是我输入的字符串变量

然后我想在目录`generatedAnswers/dirName'中插入
fileName
,使文件按照以下结构落入dirName目录:

/ generatedAnswers
   /dirName
     fileName.txt
我尝试了以下代码,但不起作用:

File file = new File("generatedQuestions/"+dirName+"/");
file.getParentFile().mkdirs();

PrintWriter writer = new PrintWriter(file+fileName+".txt");
我得到的结果是: /生成答案 dirNamefineName.txt(此文件已转换为文件名)

我做错了什么?

试着这样做:

String dirName = "someDirectory";
String fileName = "file.txt";
File file = new File("generatedQuestions/" + dirName + "/" + fileName);
if(file.getParentFile().mkdirs()) {
    PrintWriter printWriter = new PrintWriter(file);
}

我认为您可以使用以下代码:


File file = new File("generatedQuestions/"+dirName+"/");
file.getParentFile().mkdirs();

PrintWriter writer = new PrintWriter(file.getAbsolutePath() +fileName+".txt");


我添加了file.getAbsolutePath(),因为您尝试获取文件路径时出错的是代码的这一行:

file.getParentFile().mkdirs();
file
路径是
generatedQuestions/dirName
,因此
file.getParentFile()
返回
generatedQuestions
,然后调用
mkdirs()
,因此只创建目录
generatedQuestions
,而不是子目录
dirName
。删除
getParentFile()
,即仅

file.mkdirs()
请注意,
mkdirs()
可能会失败,在这种情况下它将返回false。您应该检查返回值,而不是假设它总是成功的

最后,
PrintWriter
构造函数的参数也是错误的。类
java.io.File
toString()
方法不打印尾随分隔符,因此需要添加该字符,即

PrintWriter writer=新的PrintWriter(file+file.separator+fileName+“.txt”);
下面的代码适用于我

String dirName=“dirName”;
File File=新文件(“generatedQuestions”+File.separator+dirName);
if(file.mkdirs()){
字符串fileName=“fileName”;
try(PrintWriter=newprintwriter(file+file.separator+fileName+“.txt”)){
}
捕获(FileNotFoundException x){
x、 printStackTrace();
}
}
否则{
System.out.println(“'mkdirs()'失败”);
}
或者,您可以像这样使用接口和类的组合

Path Path=Path.get(“generatedQuestions”,dirName);
试一试{
创建目录(路径);
path=path.resolve(文件名+“.txt”);
PrintWriter=新的PrintWriter(path.toFile());
}
捕获(IOX异常){
x、 printStackTrace();
}