是这样的,假如我把jsp页面都放在Tomcat5.5\\webapps\\File文件夹中。如下代码:
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head>
<title>查询页面</title>
</head>
<body>
<center>
<%
/*String pth=request.getRealPath("./");
File fl=new File(pth,"\\smp188a.jsp");*/
File fl=new File("C:\\Tomcat5.5\\webapps\\File\\smp188a.jsp");
out.println("文件或目录是否存在:"+fl.exists());
out.println("<br>是文件吗:"+fl.isFile());
out.println("<br>是文件夹吗:"+fl.isDirectory());
out.println("<br>名称:"+fl.getName());
out.println("<br>路径:"+fl.getPath());
out.println("<br>绝对路径:"+fl.getAbsolutePath());
out.println("<br>文件大小:"+fl.length()+"字节");
%>
</center>
</body>
</html>
书上所有的代码都是按红色那种路径模式写的,但我根本编译不了,不知为什么。还有就是这样的,比如我要遍历目录写一段代码:
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head><title>文显示</title>
</head>
<body>
<center>
<h1>该文件夹下存在下列文件和文件夹</h1>
<table width="500" align="center" border="1">
<%
String pth=request.getRealPath("./javasmp/ch16");
File fl=new File(pth);
String str[]=fl.list();
for(int i=1;i<str.length;i++){
File f=new File(pth+str[i]);
out.println("<tr><td bgcolor=yellow>"+str[i]+"</td></tr>");
}
%>
</table>
</center>
</body>
</html>
我把文件存放在"C:\\Tomcat5.5\\webapps\\ROOT\\javasmp\\ch17文件夹中,那么这样我可以按照上面写的遍历ch16文件夹(ch16与ch17同在javasmp下,而该被编译的文件代码放在ch17中),但是如果我这样写:
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head><title>文显示</title>
</head>
<body>
<center>
<h1>该文件夹下存在下列文件和文件夹</h1>
<table width="500" align="center" border="1">
<%
File fl=new File("C:\\Tomcat5.5\\webapps\\ROOT");
String str[]=fl.list();
for(int i=1;i<str.length;i++){
File f=new File("C:\\Tomcat5.5\\webapps\\ROOT"+str[i]);
out.println("<tr><td bgcolor=yellow>"+str[i]+"</td></tr>");
}
%>
</table>
</center>
</body>
</html>
也就是我把该编译的文件放在"C:\\Tomcat5.5\\webapps\\File文件夹中,用该文件去执行遍历"ROOT“的文件夹(ROOT文件夹与File文件夹同在webapps文件夹下),无论是按照书上写的路径那样,还是模仿第一个通过的代码路径那样写,都通不过。郁闷死了,折腾一上午了,都没搞明白,希望大家帮帮我,躬谢了!
(都是在Tomcat下编译的)
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head>
<title>查询页面</title>
</head>
<body>
<center>
<%
/*String pth=request.getRealPath("./");
File fl=new File(pth,"\\smp188a.jsp");*/
File fl=new File("C:\\Tomcat5.5\\webapps\\File\\smp188a.jsp");
out.println("文件或目录是否存在:"+fl.exists());
out.println("<br>是文件吗:"+fl.isFile());
out.println("<br>是文件夹吗:"+fl.isDirectory());
out.println("<br>名称:"+fl.getName());
out.println("<br>路径:"+fl.getPath());
out.println("<br>绝对路径:"+fl.getAbsolutePath());
out.println("<br>文件大小:"+fl.length()+"字节");
%>
</center>
</body>
</html>
书上所有的代码都是按红色那种路径模式写的,但我根本编译不了,不知为什么。还有就是这样的,比如我要遍历目录写一段代码:
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head><title>文显示</title>
</head>
<body>
<center>
<h1>该文件夹下存在下列文件和文件夹</h1>
<table width="500" align="center" border="1">
<%
String pth=request.getRealPath("./javasmp/ch16");
File fl=new File(pth);
String str[]=fl.list();
for(int i=1;i<str.length;i++){
File f=new File(pth+str[i]);
out.println("<tr><td bgcolor=yellow>"+str[i]+"</td></tr>");
}
%>
</table>
</center>
</body>
</html>
我把文件存放在"C:\\Tomcat5.5\\webapps\\ROOT\\javasmp\\ch17文件夹中,那么这样我可以按照上面写的遍历ch16文件夹(ch16与ch17同在javasmp下,而该被编译的文件代码放在ch17中),但是如果我这样写:
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head><title>文显示</title>
</head>
<body>
<center>
<h1>该文件夹下存在下列文件和文件夹</h1>
<table width="500" align="center" border="1">
<%
File fl=new File("C:\\Tomcat5.5\\webapps\\ROOT");
String str[]=fl.list();
for(int i=1;i<str.length;i++){
File f=new File("C:\\Tomcat5.5\\webapps\\ROOT"+str[i]);
out.println("<tr><td bgcolor=yellow>"+str[i]+"</td></tr>");
}
%>
</table>
</center>
</body>
</html>
也就是我把该编译的文件放在"C:\\Tomcat5.5\\webapps\\File文件夹中,用该文件去执行遍历"ROOT“的文件夹(ROOT文件夹与File文件夹同在webapps文件夹下),无论是按照书上写的路径那样,还是模仿第一个通过的代码路径那样写,都通不过。郁闷死了,折腾一上午了,都没搞明白,希望大家帮帮我,躬谢了!
(都是在Tomcat下编译的)
楼主【gjk11】截止到2008-06-26 14:13:30的历史汇总数据(不包括此帖):
发帖数:5 发帖分:130
结贴数:5 结贴分:130
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
java相对路径与绝对路径总结
http://gmf.javaeye.com/blog/117978
<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<html>
<head>
<title>查询页面 </title>
</head>
<body>
<center>
<%
/*String pth=request.getRealPath("./");
File fl=new File(pth,"\\smp188a.jsp");*/
File fl=new File("C:\\Tomcat5.5\\webapps\\File\\smp188a.jsp");
out.println("文件或目录是否存在:"+fl.exists());
out.println(" <br>是文件吗:"+fl.isFile());
out.println(" <br>是文件夹吗:"+fl.isDirectory());
out.println(" <br>名称:"+fl.getName());
out.println(" <br>路径:"+fl.getPath());
out.println(" <br>绝对路径:"+fl.getAbsolutePath());
out.println(" <br>文件大小:"+fl.length()+"字节");
%>
</center>
</body>
</html>
没有什么错误,运行结果如下:
文件或目录是否存在:false
是文件吗:false
是文件夹吗:false
名称:smp188a.jsp
路径:C:\Tomcat5.5\webapps\File\smp188a.jsp
绝对路径:C:\Tomcat5.5\webapps\File\smp188a.jsp
文件大小:0字节
我觉得是这样:
lz用绝对路径去访问文件绝对没有错,换成相对路径也是一样,比如a文件位于C:\Tomcat5.5\webapps\File\,b文件我不管它在哪,用绝对路径也就是C:/Tomcat5.5/webapps/File/a.jsp肯定是没有错的,如果你路径这么写:../b.jsp(b.jsp),编译器会默认到你a文件(也就是被编译的文件)位置去找b文件,如果两个文件都位于同一个文件夹中,那么你两种路径用哪个都可以但是我觉得问题不在这:lz说根本编译不了,那就是语法错误咯,可是我真没发现有啥问题,不行你就把已经编译过的字节码文件都delete,然后在试试吧,被编译的文件到这去找:..\WEB-INF\work\_jsp