【发布时间】:2016-09-20 06:43:44
【问题描述】:
我正在编写将项目保存在选定目录中所需的程序。每个项目目录都必须包含一个 HTML 文件,该文件可能具有不同的元素,具体取决于项目的状态,以及子目录中的 JavaScript 文件标准库。
我不熟悉这通常在 Java 中完成的方式(或者甚至在理论上如何完成)。是否有适合此任务的特定工具、技术或库?请注意,我使用 Eclipse 作为我的 IDE。我一直在考虑使用某种模板生成所需的文件,和/或从包中提取它们,但我对这类问题很陌生,不知道如何从这里开始。
编辑:进一步阐述
我的项目是一个供我个人使用的小型实用程序,因此可维护性不是什么大问题。我正在使用 Java 8。在每个用户创建的项目中,库中只有三个不变的 .js 文件和一个将在浏览器中启动以运行脚本的小 html 文件,以及一个用户生成的 .js 文件。非常基本的东西。
编辑:问题已解决...我认为
我已经提出了自己的部分解决方案,我想我可以从这里解决剩下的问题,但 D.B. 的帖子仍然内容丰富且很有帮助,所以我接受它作为答案。
我意识到我最初的问题不够具体。我希望隐藏我的静态脚本资源和 HTML 文件的模板,以便无法从文件系统直接访问它们。我一直在考虑将它们放在与应用程序 jar 位于同一目录中的某种包文件中。然而,我没想到我可以简单地将它们放在 jar 本身的资源文件夹中。
在用户指定的项目目录中创建库目录:
libraryDir = projectDir.resolve("libraries");
new File(libraryDir.toUri()).mkdirs(); // Create libraries directory
// Unpack library resources to project
unpackLibrary("file1.js");
unpackLibrary("file2.js");
unpackLibrary("file3.js");
unpackLibrary 函数:
private void unpackLibrary(String scriptName) {
String resourcePath = "/libraries/" + scriptName;
Path fileName = Paths.get(resourcePath).getFileName();
try (InputStream in = getClass().getResourceAsStream(resourcePath);) {
Files.copy(in, libraryDir.resolve(fileName));
}
catch (FileAlreadyExistsException e) {
System.out.println("File unpack failed: File already exists (" + e.getFile() + ")");
}
catch (IOException e) {
e.printStackTrace();
}
}
应用程序将使用临时目录中的项目,直到用户决定保存它,在这种情况下,我将使用 D.B. 的建议将项目文件复制到新目录。
【问题讨论】:
标签: java eclipse templates filesystems package