如何获得我的项目的根路径?

时间:2014-07-03 09:23:15

标签: java jsp

我有在Eclipse中开发的Tomcat中运行的JSP项目。

我想要一些存储在项目中的文件。

这是我的项目结构:

.settings
build
data
ImportedClasses
src
WebContent
.classpath
.project

我想从位于data的JSP文件中的代码中访问WebContent文件夹。

尝试下面的一些代码:

File userDataDirFile = new File ( "data" );
String path = userDataDirFile.getAbsolutePath();

打印

C:\Program Files\eclipse\data\users

然后

this.getClass().getClassLoader().getResource("").getPath()

打印

C:/Workspaces/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/survey/WEB-INF/classes/

另一个:

System.getProperty("user.dir")

打印

C:\Program Files\eclipse

我没有尝试过的代码(我认为第二个解决方案可以工作,但它没有)可以找到我的项目的根文件夹。有人可以提供建议吗?

2 个答案:

答案 0 :(得分:0)

编辑:不会在您的战争中部署不在WebContent中的文件。您必须将您的代码中使用的文件放在WebContent中,并尝试使用ServletContext指向您的Web应用程序的根文件夹: 如果您的文件与WEB-INF位于同一文件夹,则:

ServletContext context = getContext();
String fullPath = context.getRealPath("/data");

顺便说一下,如果您不想直接访问data文件,建议将其放入WEB-INF,以便没有人可以直接访问它们。

答案 1 :(得分:0)

String caminhoProjeto = Thread.currentThread().getContextClassLoader().getResource("").getPath();

这类似于“ src”路径,但在部署和运行后是二进制文件上下文的“类”路径。

例如,我的班级需要使用这种方式“项目的根目录”:


PropertiesReader.java:

public class PropertiesReader {

    public static String projectPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    public static String propertiesPath = "/META-INF/";

    public static Properties loadProperties(String propertiesFileName) throws IOException {
        Properties p = new Properties();
        p.load(new FileInputStream(projectPath + propertiesPath + propertiesFileName));
        return p;
    }

    public static String getText(String propertiesFileName, String propertie) {

        try {
            return loadProperties(propertiesFileName).getProperty(propertie);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return propertie;
    }
}

PersonRegistration.java:

@ManagedBean
public class PersonRegistration {
    private Integer majority = Integer.parseInt(PropertiesLeitor.getText("Brasil.properties", "pessoa.maioridade"));
}

Brasil.properties(在src / META-INF中):

pessoa.maioridade = 18