如何在Paths #get方法中避免硬编码完整路径

时间:2017-08-24 12:47:42

标签: java primefaces

我想将Primefaces UploadedFile的副本保存到我的项目目录中。我一直在互联网上搜索解决方案,我发现使用Paths#get方法。 this答案中给出的示例是Paths.get("/path/to/uploads");,问题是,/path/to/uploads的确切路径在哪里?我无法找到它。我的意思是我应该在哪里创建路径/path/to/uploads?在我的项目目录下?但是哪个文件夹?我通过对Paths.get("C:/uploads/");

之类的完整路径进行硬编码来临时解决此问题

3 个答案:

答案 0 :(得分:2)

FacesContext.getCurrentInstance().getExternalContext().getRealPath("/")将返回项目的当前安装目录。

正如@Kukeltje建议的那样,永远不要将上传的文件保存到项目目录中,...将其保存在webapps之外,甚至保存在容器之外。

因此,在您的容器(您要放置上传的副本的位置)外部创建一个目录,并将../附加到上述路径中以进行每个后退步骤。

比如说,如果您的应用程序部署在D:/Tools/Tomcat7/webapps/your-application-name(例如在使用Tomcat的Windows上)并且您希望将副本保存到D:/Tools/uploads,那么下面将为您提供所需的文件路径:

String uploadsFilePath = FacesContext.getCurrentInstance().getExternalContext()
    .getRealPath("../../../uploads");

将其与Paths.get(uploadsFilePath)一起使用并开发下载逻辑(我不确定您使用的Paths类库。)

答案 1 :(得分:0)

getClassLoader().getResource(Path/to/file)

怎么样?

所以喜欢

MyClass.class.getResource(bla/bla)

现在嵌套在src/resources

像这样你是独立于系统的 的 #profit

答案 2 :(得分:0)

您有几种选择:

  1. 为了实现快速开发,您可以使用硬编码路径,但请确保它存在于您的SUT(被测系统)中。
  2. 您可以在模块中将其定义为静态最终字符串,但这意味着每次要更改该路径时,都需要重新编译...
  3. 您可以从属性/配置文件中读取该值。
  4. 还有更多选项(如果您在Windows上使用注册表,或使用环境变量)。