在 Java 项目中管理外部文件的正确技术是什么?或者更普遍地在任何项目中。
我目前正在使用 IDE IntelliJ,但我希望这是一个更通用的解决方案,而不是依赖于 IDE 的解决方案。
我有以下文件夹结构:
├── headers
│ └── header1
├── htmlfiles
│ └── reply1.html
├── out
│ └── production
│ └── WebApp-e01
│ └── ch
│ └── miao
│ └── webapp
│ └── server
│ ├── Content.class
│ ├── Request.class
│ └── Server.class
├── README.md
├── src
│ └── ch
│ └── miao
│ └── webapp
│ └── server
│ ├── Content.java
│ ├── Request.java
│ └── Server.java <-- MAIN HERE
└── WebApp-e01.iml
我从另一台笔记本电脑上的 git 克隆了该项目,因此绝对文件路径不再有效,因为用户名可能不同,项目名称或位置或许多其他内容。
因此,这意味着在任何类中像这样的代码行都不再有效。
BufferedReader reader = new BufferedReader(new FileReader("/home/kevin/IdeaProjects/ApplicazioniWeb/htmlfiles/reply1.html"))
然后我尝试使用相对路径:
BufferedReader reader = new BufferedReader(new FileReader("./htmlfiles/reply1.html"))
如果我从 Intellij 运行它(因为魔法(,但如果我想从控制台以良好的旧方式运行它,这"很好":
java ch.miao.webapp.server.Server
为了使它工作,我必须再次更改! 我的类中的路径,以及根据我使用的IDE可能会改变,因为inetellij将所有东西都放在out/production/...
但是其他 IDE 有不同的位置,如果您在团队中工作,这将是一场噩梦!
所以我想知道是否有一个通用的解决方案,我可以在从 git 克隆项目后从 IDE 运行我的程序或形成命令行并形成任何其他工作站,而无需更改我的文件路径。
您可以使用名为"user.dir"的Java系统属性。它的名称可能有点误导,因为它指向启动 JVM 的目录。
String workingDirectory = System.getProperty("user.dir");
File file = new File(workingDirectory + File.separator + "htmlfiles" + File.separator + "reply1");