现在有一个文件ccc.data,在一个类里用一个实例方法负责读取,方法返回一个String类型的值,在Servlet里调用这个方法。并把它输出。但是却报文件读取异常:
java.io.FileNotFoundException: E:\Information\Tomcat6.0\bin\tdy218\threeDES\key_
Operate\key\key.txt (系统找不到指定的路径。)
真实文件确实不在上面这个目录下放着。
然后我又在放Servlet的地方写个一个方法(main()方法),调用读取文件的方法。却可以读取出来。
先是相对路径不行,然后把相对路径转换成绝对路径也不行,我就发现,new File("").getAbsolutePath();有问题,在应用程序里还正常,一到web应用中就不行了。然后想用getServletContext().getRealPath(),然后看看要写的地方也抛弃了,我想在一个非Servlet的.java文件里用,需要继承HttpServlet类,换需要HttpServletRequest和HttpServletResponse对象。
真是无语了,大家帮忙看看。为了验证我有写了一个Servlet,只不过没有doGet()、doPost()方法罢了。
ccc.data的存放位置(绝对路径):
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\key\ccc.data
生成的读取这个ccc.data文件的方法字节码文件的位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\Text_Read.class
生成的Servlet字节码文件的存放位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\MVC\Test_Servlet.class
源文件都在这里放着:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\
总结:使用相对路径不行,然后又换作转化绝对路径也不行。
private final String keyFile = "tdy218/threeDES/key_Operate/key/key.data";
new File("").getAbsolutePath()+....;
大家帮忙看看.
java.io.FileNotFoundException: E:\Information\Tomcat6.0\bin\tdy218\threeDES\key_
Operate\key\key.txt (系统找不到指定的路径。)
真实文件确实不在上面这个目录下放着。
然后我又在放Servlet的地方写个一个方法(main()方法),调用读取文件的方法。却可以读取出来。
先是相对路径不行,然后把相对路径转换成绝对路径也不行,我就发现,new File("").getAbsolutePath();有问题,在应用程序里还正常,一到web应用中就不行了。然后想用getServletContext().getRealPath(),然后看看要写的地方也抛弃了,我想在一个非Servlet的.java文件里用,需要继承HttpServlet类,换需要HttpServletRequest和HttpServletResponse对象。
真是无语了,大家帮忙看看。为了验证我有写了一个Servlet,只不过没有doGet()、doPost()方法罢了。
ccc.data的存放位置(绝对路径):
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\key\ccc.data
生成的读取这个ccc.data文件的方法字节码文件的位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\Text_Read.class
生成的Servlet字节码文件的存放位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\MVC\Test_Servlet.class
源文件都在这里放着:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\
总结:使用相对路径不行,然后又换作转化绝对路径也不行。
private final String keyFile = "tdy218/threeDES/key_Operate/key/key.data";
new File("").getAbsolutePath()+....;
大家帮忙看看.
然后:String path = getServletContext().getRealPath("/data");
String separator = System.getProperty("file.separator");
String filePath = path + separator + "ccc.data";
File file = new File(filePath);
package tdy218.threeDES.key_Operate;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.File;public class Text_Read
{
private final String keyFile = "\\tdy218\\threeDES\\key_Operate\\key\\key.txt";
public String read(){
String key = "";
try
{
String FilepathTemp = new File("").getAbsolutePath();
FileReader fer = new FileReader(FilepathTemp+keyFile);
BufferedReader ber = new BufferedReader(fer);
while((key=ber.readLine())==null){break;}
ber.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return key;
}
/*
public static void main(String args[])
{
String res=new Text_Read().read();
System.out.println(res);
}
*/
}要是在上面的程序里用getServletContext().getRealPath("/data");貌似不行吧?
下面是我写的一个测试用的Servlet():package tdy218.threeDES.MVC;import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import tdy218.threeDES.key_Operate.Text_Read;public class Test_Servlet extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{
response.setContentType("text/html;charset=gbk");
PrintWriter show = response.getWriter();
show.println(new Text_Read().read());
}
}
PrintWriter show = response.getWriter();
String path = getServletContext().getRealPath("/data");
String separator = System.getProperty("file.separator");
String filePath = path + separator + "ccc.data";
show.println(new Text_Read().read(filePath));然后public String read(String filePath){
String key = "";
try
{
File file = new File(filePath).getAbsolutePath();
FileInputStream is = new FileInputStream(file);
InputStreamReader ir = new InputStreamReader(is);
LineNumberReader ber = new LineNumberReader(ir);
while((key=ber.readLine())==null){break;}
ber.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return key;
}
还有就算你的.data文件是程序生成的,也可以将它放在/data下啊。
PrintWriter show = response.getWriter();
String path = getServletContext().getRealPath("/data");
String separator = System.getProperty("file.separator");
String filePath = path + separator + "ccc.data";
show.println(new Text_Read().read(filePath));
public String read(String filePath){
String key = "";
try
{
File file = new File(filePath);
FileInputStream is = new FileInputStream(file);
InputStreamReader ir = new InputStreamReader(is);
LineNumberReader ber = new LineNumberReader(ir);
while((key=ber.readLine())==null){break;}
ber.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return key;
}
这样的话,该咋弄那?
要取得具体位置需要这样getRealPath("/你的文件相对位置")