我在动态Web应用程序的WEB-INF / Classes目录中有一个Java类UpdateStats。这个类有一个函数writeLog(),它将一些日志写入文本文件。我希望这个文本文件位于webcontent目录中。因此,每次调用该函数时,都会在该文本文件中写入更新统计信息。 问题是如何从该函数中提供webcontent目录中该文本文件的路径,该函数位于WEB-INF / Classes目录中。
答案 0 :(得分:3)
您可以从ServletContext获取您的webapp根目录:
String path = getServletContext().getRealPath("WEB-INF/../");
File file = new File(path);
String fullPathToYourWebappRoot = file.getCanonicalPath();
希望这有帮助。
答案 1 :(得分:0)
您可以在servlet中执行类似下面的操作,
执行getServletContext().getRealPath()
并输入一些字符串参数时,文件将显示在您的webcontent位置。
如果你想要WEB-INF中的东西,你可以给像“WEB-INF / my_updates.txt”这样的fileName。
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();
}
}
}
}
}
答案 2 :(得分:-1)
要编写文件,您需要知道服务器上Web内容目录的绝对路径,因为文件类需要绝对路径。
File f = new File("/usr/local/tomcat/webapps/abc/yourlogfile.txt");
FileOutputStream out = new FileOutputStream(f);
out.writeLog("Data");
假设:abc是您的项目名称
部署应用程序时,WebContent不是任何目录。 Web内容下的所有文件都直接在项目名称下。