package com.file.servlet;import java.io.IOException;
import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import java.io.File;
import java.util.Locale;
public class FileServlet extends HttpServlet {
private int flag=0;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("gb2312");


if(0==flag)
{
flag=1;

File firstFile=new File("");
File[] root=firstFile.listRoots();
StringBuffer sbf=new StringBuffer();
for(int i=0;i<root.length;i++)
{
sbf.append("&nbsp;&nbsp;<a href=\"./file?name="+root[i]+"\">");
sbf.append(root[i]);
sbf.append("</a>&nbsp;&nbsp;");



}

resp.getWriter().print(sbf.toString());
}

else
{
req.setCharacterEncoding("gb2312");
String urlString=req.getParameter("name");


if(urlString!=null)
{
File f=new File(urlString);
StringBuffer sbf=new StringBuffer();
String str=Tree(f, sbf, req);
if(str!=null)
{
resp.getWriter().println(str);
}

}

}


} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

this.doGet(req, resp);

}

private String Tree(File file,StringBuffer s,HttpServletRequest req) throws UnsupportedEncodingException 
{

if(file == null || !file.exists()) 
{
System.out.println("文件不存在");
return null;
}
File[] subs = file.listFiles();

if(subs==null) 
{
System.out.println("没有子目录或者文件");
return null;
}
String urlString=req.getParameter("name");
for (int i = 0; i < subs.length; i++) 
{

if(subs[i].isDirectory())
{

s.append("&nbsp;&nbsp;<a href=\"./file?name="+urlString+subs[i].getName()+"\\\">");
s.append(subs[i].getName());
s.append("</a>&nbsp;&nbsp;");

}
if(subs[i].isFile())
{
s.append(subs[i].getName());
}

}


return s.toString();
  
}
}上面是我写的一个显示电脑目录和文件的servlet类似于资源管理器
一开始界面是显示电脑上的几个盘符,可是我刷新一次后就消失了?刷新一次不是相当于从新发送请求吗?
还有个问题是中文下的目录和文件都无法显示.该成英文每问题.

解决方案 »

  1.   

    package com.file.servlet;import java.io.IOException;
    import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import java.io.File;
    import java.util.Locale;
    public class FileServlet extends HttpServlet {
    private int flag=0;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    resp.setCharacterEncoding("gb2312");


    if(0==flag)
    {
    flag=1;

    File firstFile=new File("");
    File[] root=firstFile.listRoots();
    StringBuffer sbf=new StringBuffer();
    for(int i=0;i<root.length;i++)
    {
    sbf.append("&nbsp;&nbsp;<a href=\"./file?name="+root[i]+"\">");
    sbf.append(root[i]);
    sbf.append("</a>&nbsp;&nbsp;");



    }

    resp.getWriter().print(sbf.toString());
    }

    else
    {
    req.setCharacterEncoding("gb2312");
    String urlString=req.getParameter("name");


    if(urlString!=null)
    {
    File f=new File(urlString);
    StringBuffer sbf=new StringBuffer();
    String str=Tree(f, sbf, req);
    if(str!=null)
    {
    resp.getWriter().println(str);
    }

    }

    }


    } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

    this.doGet(req, resp);

    }

    private String Tree(File file,StringBuffer s,HttpServletRequest req) throws UnsupportedEncodingException 
    {

    if(file == null || !file.exists()) 
    {
    System.out.println("文件不存在");
    return null;
    }
    File[] subs = file.listFiles();

    if(subs==null) 
    {
    System.out.println("没有子目录或者文件");
    return null;
    }
    String urlString=req.getParameter("name");
    for (int i = 0; i < subs.length; i++) 
    {

    if(subs[i].isDirectory())
    {

    s.append("&nbsp;&nbsp;<a href=\"./file?name="+urlString+subs[i].getName()+"\\\">");
    s.append(subs[i].getName());
    s.append("</a>&nbsp;&nbsp;");

    }
    if(subs[i].isFile())
    {
    s.append(subs[i].getName());
    }

    }


    return s.toString();
      
    }
    }
      

  2.   

    目录必须为英文
    oracle,tomcat都是这样的
      

  3.   

    package com.file.servlet;import java.io.IOException;
    import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import java.io.File;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    import java.util.Locale;
    public class FileServlet extends HttpServlet { @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException { req.setCharacterEncoding("GBK");
    resp.setCharacterEncoding("GBK");
    resp.setContentType("text/html; charset=GBK");

    String urlString = req.getParameter("name");
    if(urlString==null)
    {

    File firstFile=new File("");
    File[] root=firstFile.listRoots();
    StringBuffer sbf=new StringBuffer();
    for(int i=0;i<root.length;i++)
    {
    sbf.append("&nbsp;&nbsp;<a href=file?name="+root[i]+">");
    sbf.append(root[i]);
    sbf.append("</a>&nbsp;&nbsp;<br>");

    }

    resp.getWriter().print(sbf.toString());
    }

    else
    {
     
    if(urlString!=null)
    {
    String newStr = new String(urlString.getBytes("ISO8859_1"), "GBK"); File f=new File(newStr);

    StringBuffer sbf=new StringBuffer();
    String str=Tree(f, sbf, req);
    if(str!=null)
    {
    resp.getWriter().println(str);
    }

    }

    }


    } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

    this.doGet(req, resp);

    }

    private String Tree(File file,StringBuffer s,HttpServletRequest req) throws UnsupportedEncodingException 
    {

    if(file == null || !file.exists()) 
    {
    System.out.println("文件不存在");
    return null;
    }
    File[] subs = file.listFiles();

    if(subs==null) 
    {
    System.out.println("没有子目录或者文件");
    return null;
    }
    String urlString=req.getParameter("name");
    String newStr=null;
    if(urlString != null){

     newStr = new String(urlString.getBytes("ISO8859_1"), "GBK");
    }

    for (int i = 0; i < subs.length; i++) 
    {

    if(subs[i].isDirectory())
    {
    s.append("&nbsp;&nbsp;<a href=\"./file?name="+newStr+subs[i].getName()+"\\\">");
    s.append(subs[i].getName());
    s.append("</a>&nbsp;&nbsp;<br>");

    }
    if(subs[i].isFile())
    {
    s.append(subs[i].getName()+"<br>");
    }

    }


    return s.toString();
      
    }
    }
    已经解决了了!这是改过后的文件.谢谢大家.