1

我在动态 Web 应用程序的 WEB-INF/Classes 目录中有一个 Java 类 UpdateStats。这个类有一个函数 writeLog(),它将一些日志写入文本文件。我希望这个文本文件位于 webcontent 目录中。因此每次函数称为更新统计信息写入该文本文件中。问题是如何在该函数中给出该文本文件在 webcontent 目录中的路径,该函数位于 WEB-INF/Classes 目录中。

4

3 回答 3

4

你可以从 ServletContext 获取你的 webapp 根目录:

String path = getServletContext().getRealPath("WEB-INF/../");
File file = new File(path);
String fullPathToYourWebappRoot = file.getCanonicalPath();

希望这可以帮助。

于 2013-05-31T13:47:09.623 回答
0

您可以在您的 servlet 中执行以下操作,

当您这样做getServletContext().getRealPath()并放置一些字符串参数时,该文件将在您的网络内容位置看到。如果你想在 WEB-INF 中加入一些东西,你可以给文件名,比如“WEB-INF/my_updates.txt”。

    File update_log = null;
final String fileName = "my_updates.txt";

@Override
public void init() throws ServletException {
    super.init();
    String file_path = getServletContext().getRealPath(fileName);
    update_log = new File(file_path);
    if (!update_log.exists()) {
        try {
            update_log.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Error while creating file : " + fileName);
        }
    }
}

public synchronized void update_to_file(String userName,String query) {

    if (update_log != null && update_log.exists()) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(update_log, true);
            fos.write((getCurrentFormattedTime()+" "+userName+" "+query+"\n").getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
于 2013-05-31T13:58:55.497 回答
-1

要编写文件,您需要知道服务器上 Web 内容目录的绝对路径,因为文件类需要绝对路径。

File f = new File("/usr/local/tomcat/webapps/abc/yourlogfile.txt");
FileOutputStream out = new FileOutputStream(f);
out.writeLog("Data");

假设: abc 是您的项目名称

部署应用程序时,WebContent 不是任何目录。Web 内容下的所有文件都直接位于项目名称下。

于 2013-05-31T06:36:22.093 回答