JAVA和GIT如何管理外部资源。正确的技术

JAVA和GIT如何管理外部资源。正确的技术,java,git,intellij-idea,Java,Git,Intellij Idea,在Java项目中管理外部文件的正确技术是什么?或者更一般地说,在任何项目中 我目前正在使用IDEIntelliJ,但我希望这是一个更通用的解决方案,而不是依赖IDE的解决方案 我有以下文件夹结构: ├── headers │   └── header1 ├── htmlfiles │   └── reply1.html ├── out │   └── production │   └── WebApp-e01 │   └── ch │   └──

在Java项目中管理外部文件的正确技术是什么?或者更一般地说,在任何项目中

我目前正在使用IDEIntelliJ,但我希望这是一个更通用的解决方案,而不是依赖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
然后我尝试使用相对路径:

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");

无论如何,不要将
文件
用于内部资源,因为一旦打包,它就不可用;使用
ClassLoader#getResourceAsStream
String workingDirectory = System.getProperty("user.dir");
File file = new File(workingDirectory + File.separator + "htmlfiles" + File.separator + "reply1");