2013-05-28 4 views
1

Проект, унаследованный, имеет шаблон excel, который заполняется, когда пользователь выполняет действие. Тот, кто его запрограммировал, изначально сделал это в файле ApplicationProperties.properties.Относительная ссылка на файл в Java

#LOCAL 
TemplatePath=C:/.../web/fileName.xls 
#LIVE 
#TemplatePath=/usr/share/tomcat/webapps/projectName/fileName.xls 

Есть несколько различных файлов, которые создаются, как это так, каждый раз, когда мы должны развернуть Я должен убедиться, чтобы идти в файл приложения свойства и обновлять их. Я хотел бы реорганизовать код так, чтобы это можно было сделать только с относительным путем к файлу. Если это был проект .net, я бы использовал Server.MapPath(), чтобы получить текущий путь, а затем добавить имя каталога/файла на него.

Есть ли способ сделать это на Java? Или есть лучший способ? Я заметил что-то о размещении файла в WEBINF/классах, когда я искал эту проблему. Это лучше? Как это работает? Я новичок в Java.

+1

Является ли это сервлет? Настольное приложение? –

+0

Это приложение для веб-сайта. – William

ответ

3

Если вы положили его в свой каталог WEB-INF/classes, то файлы будут доступны в вашем пути к классам, и вы можете обратиться к ним с помощью MyClass.class.getResourceAsStream("classpath path"). Это лучше, чем вы пытаетесь сделать, потому что путь к классу находится под вашим контролем. Когда вы используете относительный путь к файлу, ваш код может сломаться, если разные IDE используют разные рабочие каталоги.

Конечно, вы не можете легко записать эти файлы, если вы это сделаете, так как они будут в вашем военном файле. Но я не уверен, что это требование для вас или нет.

Вот отличный ответ, который, кажется, отношение к вашему вопросу: getResourceAsStream() vs FileInputStream

1

Вы можете поместить свой шаблон XLS в пакете Java, что-то вроде этого:

MyWebApp 
+---src 
| \---org 
|  \---paulvargas 
|   \---test 
|    | TestServlet.java 
|    | 
|    \---resources 
|      template.xls 
| 
\---WebContent 
    \---WEB-INF 
     | web.xml 
     | 
     \---lib 

При развертывании приложения, файл template.xls автоматически помещается в каталог classes в каталоге указанным пакетом java, WEB-INF/classes/org/paulvargas/test/resources/. Таким образом, чтобы прочитать файл:

package org.paulvargas.test; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.PrintWriter; 
import java.util.Scanner; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TestServlet extends HttpServlet { 

    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 

     ClassLoader classLoader = Thread.currentThread() 
      .getContextClassLoader(); 
     InputStream inputStream = classLoader 
      .getResourceAsStream("org/paulvargas/test/resources/template.xls"); 

     // Populate the template 

    } 

} 

Смотрите также:

+0

Интересно. Я посмотрю. Спасибо за помощь. – William

Смежные вопросы