繁体   English   中英

Java在当前包文件夹中创建一个文件夹

[英]Java create a folder in current package folder

在我的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是我要在当前软件包目录中创建的文件夹。


UPDATE

感谢大家回答我的问题。 我不是很有经验,所以会犯很多错误。

我正在生成一堆markdown文件,这些文件可以按原样使用,稍后将在我的应用程序中进行进一步处理,即合并为1个单个文件,然后转换为HTML。 我的应用程序位于项目中,文件结构如下:

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

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

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

非常感谢大家!

假设您当前的路径在application文件夹(包文件夹在其中)内,并且您的类文件不在jar中,则可以执行此操作。

String OUTPUT_DIR = this.getClass().getCanonicalName().replace(".","/");
OUTPUT_DIR = OUTPUT_DIR.substring(0,OUTPUT_DIR.lastindexOf('/'));

从您的问题中还不清楚您要做什么。 但是,我认为这是您要的:

    ...
    File outputDir = new File(OUTPUT_DIR);
    File outputFile = new File(outputDir, planNames.get(i) + ".md");
    bw = new BufferedWriter(new FileWriter(outputFile));
    ...

上面的代码在目录OUTPUT_DIR打开一个文件(名为planNames.get(i) + ".md" )。 该文件被打开以作为文本文件写入。 如果尚不存在,将创建它,如果存在,则将其截断。

这假定输出目录已经存在,并且OUTPUT_DIR是一个String其值是该目录的可解析路径名。


我还应该指出,即使您的应用程序甚至需要在IDE外部运行,也无法将文件写入IDE中的项目源树中。 (这在IDE中也很奇怪……除非您正在生成Java源代码 。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM