文件操作核心类File

  JSP的文件操作是与通过调用Java核心包中的File类完成。File位于java .io包中。在jsp页面中用<%@ page import="java.io.*"%>来导入。

  File主要是完成文件的命名、查询文件属性和处理目录等操作。它不进行文件内容的读写。

 

1.获取文件属性。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<font size="2">
<%
    //用构造函数创建一个文件实例
    File file=new File("/home/jim/Development/apache-tomcat-7.0.30/webapps/Root/index.jsp");
    //获取文件名
    out.print("文件名称");
    out.print(file.getName());
    out.print("<br>");
    //获取文件绝对路径
    out.print("文件绝对路径:");
    out.print(file.getAbsolutePath());
    out.print("<br>");
    //获取上层路径
    out.print("文件上层路径:");
    out.print(file.getParent());
    out.print("<Br>");
    //判断是否为目录
    out.print("是否为目录");
    out.print(file.isDirectory());
    out.print("<br>");
    //获取文件大小
    out.print("文件长度:");
    out.print(file.length());
    out.print("<br>");
    //判断是否可读
    out.print("是否可读:");
    out.print(file.canRead());
    out.print("<br>");
    //判断是否可写
    out.print("是否可写:");
    out.print(file.canWrite());
    out.print("<br>");
    //获取上次修改时间,用1970年午夜至今的毫秒数表示
    out.print("上次修改时间");
    out.print(file.lastModified());
    out.print("<br>");
%>
</font>
</body>
</html>

显示结果为:

 

2.创建目录

  通过File类的mkdir()方法,可以在指定路径处创建目录。

  前提是Tomcat进程具有创建目录的权限。

 1 <%@ page language="java" contentType="text/html; charset=GB18030"
 2     pageEncoding="GB18030"%>
 3 <%@ page import="java.io.*" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11 <font size="2">
12 <%
13     File dir=new File("/home/jim/Development/apache-tomcat-7.0.30/webapps/ROOT/","testCreateDir");
14 %>
15<%=dir.getParent() %>下创建一个新的目录<%=dir.getName() %><br>
16 目录是否存在:<%=dir.exists() %><br>
17 创建是否成功 :<%=dir.mkdir() %><Br>
18 检查是否为目录:<%=dir.isDirectory() %><br>
19 </font>
20 </body>
21 </html>

第一次运行:

证明创建成功了。

第二次运行:

因为目录已经存在,所以创建失败了。

 

 

3.遍历目录

  File类提供了list()方法和listFiles()方法来获取文件和目录清单。

  如果当前File类的实例是一个目录,那么这两个方法会返回这个目录下的所有文件和子目录。

3.1list()方法

  list()返回的类型是String[],存储的是他们的路径。

  下面的例子掩饰了获取目录下子目录和文件信息,进行遍历目录操作。

Ex6_3.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<font size="2"
    <%!
        void tree(String args,JspWriter out,int level){
    try{
        int index=level;
        File pathName=new File(args);
        String[] files=pathName.list();
        if(files==null||files.length==0){
            return;
        }
        for(int i=0;i<files.length;i++){
            File f=new File(pathName.getPath(),files[i]);
            if(f.isDirectory()){
                for(int k=0;k<index;k++)
                    out.print("&nbsp&nbsp");
                out.print(f.getName());
                out.print("<br>");
                tree(f.getAbsolutePath(),out,index+1);
            }
            else{
                for(int k=0;k<index;k++)
                    out.print("&nbsp&nbsp");
                out.print("|--");
                out.print(f.getName());
                out.print("<br>");
            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}
    %>
    <%
        String dir="/home/jim/Development/apache-tomcat-7.0.30/webapps";
        tree(dir,out,0);
    %>
></font>
</body>
</html>

运行结果为:

3.2listFiles()方法

  listFiles()返回的类型是File[],是Files类型的引用,而不是字符串。

  同list()方法一样,listFiles()方法返回的结果中可能包含目录,他们也有自己的文件和子目录。因此需要递归调用listFiles()方法遍历整个目录。

3.3带有过滤功能的list()和listFiles()

  如果需要列出目录下指定类型的文件,可以使用带有过滤功能的list()方法。

public String [] list(FilenameFileter filter);

该方法用字符串形式返回目录下指定类型的所有文件。

public File [] listFiles(FilenameFileter filter);

该方法用File对象返回目录下指定类型的所有文件。

而FilenameFilter是一个接口,该接口规定了一个方法:

public Boolean accept(File dir,String name);

在调用list方法时,传递一个实现该接口的对象,将用accept方法检查是否符合要求。

下面的例子列出了后缀名为".html"的文件:

Ex6_3_1
 1 <%@page import="org.eclipse.jdt.internal.compiler.ast.PostfixExpression"%>
 2 <%@ page language="java" contentType="text/html; charset=GB18030"
 3     pageEncoding="GB18030"%>
 4     <%@ page import="java.io.*" %>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 9 <title>Insert title here</title>
10 </head>
11 <body>
12 <font size="2">
13 <%!
14     void tree(String args,JspWriter out,int level){
15     try{
16         int index=level;
17         File pathName=new File(args);
18         //构造文件名过滤器
19         PostfixFilter filter =new PostfixFilter("html");
20         //列出文件和子目录
21         String[] files=pathName.list(filter);
22         if(files==null||files.length==0){
23             return;
24         }
25         for(int i=0;i<files.length;i++){
26             File f=new File(pathName.getPath(),files[i]);
27             if(f.isDirectory()){
28                 for(int k=0;k<index;k++)
29                     out.print("&nbsp&nbsp");
30                 out.print(f.getName());
31                 out.print("<br>");
32                 tree(f.getAbsolutePath(),out,index+1);
33             }
34             else{
35                 for(int k=0;k<index;k++)
36                     out.print("&nbsp&nbsp");
37                 out.print("|--");
38                 out.print(f.getName());
39                 out.print("<br>");
40         }
41         }
42     }catch (Exception e){
43         e.printStackTrace();
44     }
45 }
46 //实现文件名过滤接口的类
47 class PostfixFilter implements FilenameFilter{
48     String str="";
49     public PostfixFilter(String postfix){
50         str="."+postfix;
51     }
52     //接口的accept方法
53     public boolean accept(File dir,String name){
54         File file=new File(dir,name);
55         //可以接受目录
56         if(file.isDirectory()) return true;
57         //可以接受指定后缀的文件
58         return name.toLowerCase().endsWith(str.toLowerCase());
59     }
60 }
61 %>
62 <%
63     String dir="/home/jim/Development/apache-tomcat-7.0.30/webapps/examples/jsp";
64     tree(dir,out,0);
65 %>
66 </font>
67 
68 </body>
69 </html>

运行结果为:

 

4.删除文件和目录

  文件删除操作使用File类的delete()方法,删除成功返回true,否则为false。

  删除目录时,只有当此目录是空目录时,才允许删除。因此如果需要删除整个目录,必须向前面的例子一样,递归地遍历所有目录,删除所有文件,才能完全删除整个目录。

Ex6_4.jsp
 1 <%@ page language="java" contentType="text/html; charset=GB18030"
 2     pageEncoding="GB18030"%>
 3     <%@ page import="java.io.*" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11 <font size="2">
12     <%
13         File dir=new File("/home/jim/Development/apache-tomcat-7.0.30/webapps/ROOT/testCreateDir");
14     %>
15<%=dir.getPath() %>下删除文件:<br>
16     <%
17         File[] files=dir.listFiles();
18         String isfile;
19         //判断文件目录下是否有文件或子目录
20         if((files!=null&&files.length!=0)){
21             for(int i=0;i<files.length;i++){
22                 //判断是否为文件
23                 if(files[i].isFile())
24                     isfile="文件";
25                 else{
26                     //判断目录是否为空
27                     if(files[i].list().length==0)
28                         isfile="空目录";
29                     else isfile="非空目录";
30                 }
31                 out.print("删除"+isfile+files[i].getName()+":");
32                 //删除文件
33                 if(files[i].delete()){
34                     out.print("成功");
35                 }
36                 else out.print("失败");
37                 out.print("<br>");
38             }
39         }
40     %>
41     删除目录<%=dir.getPath() %>
42     <%
43         if(dir.delete()) out.print("成功");
44         else out.print("失败");
45     %>
46 </font>
47 </body>
48 </html>

在要删除的文件夹的内容如下:

而“未命名文件夹”不为空,“未命名文件夹2”为空。

执行代码,结果如下:

可见只有文件夹为空才可以删除。

 

 

 

 

 

posted @ 2012-10-16 02:10  Jim-Huang  阅读(288)  评论(0编辑  收藏  举报