2

在我的 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 文件,可以按原样使用,稍后将在我的应用程序中进一步处理,即合并为一个单个文件,并翻译成 HTML。我的应用程序位于一个项目中,文件结构如下:

root
  |--other parts
  |--definitions
  |    |--definition
  |    |--java
  |    |    |--validator
  |    |    |--docGenerator
  |    |--pom.xml
  |--pom.xml

docGenerator是我的项目。我应该放在哪里:

  • 中间生成的文件,我想保留
  • 我将生成、使用和删除的临时文件
  • 最终输出文件
  • 我的程序读取和使用的资源文件

非常感谢大家!

4

2 回答 2

1

好吧,假设您当前的路径在应用程序文件夹中(您的包文件夹所在的位置),并且您的类文件不在 jar 中,您可以这样做。

String OUTPUT_DIR = this.getClass().getCanonicalName().replace(".","/");
OUTPUT_DIR = OUTPUT_DIR.substring(0,OUTPUT_DIR.lastindexOf('/'));
于 2013-07-14T02:21:09.703 回答
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_DIRString值是目录的可解析路径名。


我还应该指出,如果您的应用程序甚至需要在 IDE 之外运行,那么将文件写入 IDE 中的项目源代码树是行不通的。(这也是在 IDE 中做的一件奇怪的事情......除非你正在生成Java 源代码。)

从这个意义上说,您可能要求的是错误的东西。即没有意义的东西。如果您告诉我们您在这里实际尝试做什么,我们可以建议更有意义的替代方案。

于 2013-07-14T02:27:19.923 回答