在我的java程序中,我想将文件写入当前包中的文件夹。如果此文件夹不存在,我将创建它。
如何使用相对路径引用这个可能不存在的文件夹,这样如果我移动我的包,我不必手动修复路径?
private void writeFamilyPerFile(String name, ArrayList<String> planNames) {
File file;
File folder = new File(OUTPUT_DIR + "/temp/");
BufferedWriter bw = null;
try {
if(!folder.exists()) {
folder.mkdir();
}
file = new File(folder + name + ".md");
file.createNewFile();
bw = new BufferedWriter(planNames);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException ignore) {
}
}
}
}
OUTPUT_DIR
是我当前包的路径,folder
是我想在当前包目录中创建的文件夹。
更新
感谢大家回答我的问题。我不是很有经验,所以犯了很多错误。
我正在生成一堆markdown文件,这些文件可以按原样使用,稍后会在我的应用程序中进一步处理,即合并为1个单独的文件,并翻译成HTML。我的应用程序存在于项目中,文件结构如下:
root
|--other parts
|--definitions
| |--definition
| |--java
| | |--validator
| | |--docGenerator
| |--pom.xml
|--pom.xml
docGenerator 是我的项目。我应该把它放在哪里:
非常感谢大家!
答案 0 :(得分:1)
假设您当前的路径位于应用程序文件夹(包文件夹所在的位置)内,并且您的类文件不在jar中,则可以执行此操作。
String OUTPUT_DIR = this.getClass().getCanonicalName().replace(".","/");
OUTPUT_DIR = OUTPUT_DIR.substring(0,OUTPUT_DIR.lastindexOf('/'));
答案 1 :(得分:0)
从您的问题中我们想要做的事情是非常不清楚的。但是,我认为这就是你要求的:
...
File outputDir = new File(OUTPUT_DIR);
File outputFile = new File(outputDir, planNames.get(i) + ".md");
bw = new BufferedWriter(new FileWriter(outputFile));
...
以上内容在目录planNames.get(i) + ".md"
中打开一个文件(名为OUTPUT_DIR
)。打开文件以写为文本文件。如果它不存在则会被创建,如果它存在则被截断。
这假设输出目录已存在,OUTPUT_DIR
是String
,其值是目录的可解析路径名。
我还应该指出,如果您的应用程序甚至需要在IDE之外运行,那么将文件写入IDE中的项目源代码树是行不通的。 (这在IDE中也很奇怪......除非你生成 Java源代码。)
从这个意义上说,你可能要求错误的东西;即没有意义的事情。如果你告诉我们你在这里尝试做什么,我们可以建议更有意义的替代方案。