File控件杂谈,创建文件夹

File杂谈——初识file控件

2015/07/23 · HTML5 ·
file控件

原稿出处: 百码山庄   

File控件杂谈,创建文件夹。首先本人表达下,那里介绍的file控件指的是网页中的FileUpload对象,也正是我们普遍的<input type=”file”> 。即便您不是想寻找这方面包车型大巴事物,就足以绕道了。

  咱们日常采用<input
type=’file’/>来达成网页汉语件上传效率,用户可以由此点击file控件选取当地文件,当我们提交包蕴该控件的表单时,浏览器会向服务器发送用户选中的文本。

File类基础,file类

File类的意义:
Java的io包中定义了File类,用于对文件或文件夹的管制操作。
File类只可以够用于表示文件或文件夹的音讯(属性)和对该公文或文件夹的删除成立操作
(不能够对剧情展开走访)
因而创立File类对象足以用程序来操作电脑上的文件或文件夹。

 

File类的构造方法:
File(String
path):通过点名的门径名字符串来创设三个新的File对象,抽象路径名是用来代表某些文件或文件夹的门道定位。
File(File parent,String
path):遵照parent父文件对象和path子文件名字符串来创立2个新的File对象。

 

File类的常用API
文本操作:
exists():判断文件是不是留存:重返值为布尔值
getCanonicalPath() :获取当前文件的正规路径名 
separator:用于表示路径层级分割符,能够幸免不相同操作系统的分割符不均等的状态
createNewFile():在硬盘中创立四个文本
length():长度
lastModified():创设时间:new Date(File.lastModified())
delete():删除
getName():获得文件或文件夹名

文本夹操作:
exists():判断文件是还是不是留存:再次回到值为布尔值
getCanonicalPath()  :获取当前文件的正规路径名 
separator:用于表示路径层级分割符,能够免止不一致操作系统的分割符不等同的景观
boolean mkdir():创制文件夹
mkdirs():假设父文件夹不设有就一路创造
listFiles():该方法重回的门道名用于表示此抽象路径名的目录中的文件和目录的数组
listFiles(FileFilter filter)
:该办法再次回到的门径名用于表示此抽象路径名的目录中的文件和目录的数组,并且带有FileFilter类型的过滤器
isDirectory():判断是还是不是文件夹
delDirectory(pp):调用删除文件夹方法

 1 public void testFile01() throws IOException{
 2         //在计算机内存中创建一个File对象,用来对应计算机的存储硬盘中的当前文件夹
 3         File file = new File(".");
 4         System.out.println("当前文件夹是否存在:"+file.exists());
 5         System.out.println("查看当前文件夹的路径位置:"+file.getCanonicalPath());
 6         //与硬盘中是否存在文件夹没有直接联系,只是存在JVM中的对象
 7         File fileDemo = new File(file,"fileDemo");
 8         System.out.println("查看当前文件夹中是否存在fileDemo文件夹:"+fileDemo.exists());
 9         if(!fileDemo.exists()){
10             fileDemo.mkdir();//创建出fileDemo文件夹  
11         }
12         
13                 File testFile = new  File(file,"aa"+File.separator+"testFile");
14         if(!testFile.exists()){
15 //            boolean flag = testFile.mkdir();
16 //            System.out.println("创建结果:"+flag);
17             testFile.mkdirs();//创建文件夹,当父目录不存在会把父目录先创建出来
18         }
19         
20         File aFile = new File(fileDemo,"a.txt");
21         System.out.println("a.txt在硬盘中是否存在:"+aFile.exists());
22         if(!aFile.exists()){
23             aFile.createNewFile();//在硬盘中创建一个文件
24         }
25         System.out.println("a.txt在硬盘中是否存在:"+aFile.exists());
26         System.out.println("a.txt的标准路径为:"+aFile.getCanonicalPath());
27         System.out.println("a.txt的文件长度为:"+aFile.length());
28         System.out.println("a.txt的创建时间:"+new Date(aFile.lastModified()));
29         /*
30          * 删除文件对象表示的文件或文件夹,成功删除返回true。
31          * 如果文件对象表示的是一个文件夹,删除的时候必须保证此文件夹是空文件夹才能删除
32          */
33         aFile.delete();
34         //删除aa会失败
35         File aa = new File(file,"aa");
36         aa.delete();
37     }

public void testFile02(){
        File file = new File(".");//当前文件夹对象
        File[] files = null;
        if(file.exists()){
            //listFiles():查看当前文件夹下有什么子文件或子文件夹,如果文件夹路径为空,返回空
            //如果此路径名不是表示一个文件夹或者发生了I/O异常,也返回null
             files = file.listFiles();
        }
        for(File f:files){
            //getName():获得文件或文件夹名
            System.out.println(f.getName());
        }
    }

    public void testFile03() throws IOException{
        File path = new File(".");
        File pppp = new File(path,"pp"+File.separator+"ppp"+File.separator+"pppp");
        File demoFile = new File(pppp,"demo.txt");
        if(!pppp.exists()){
            pppp.mkdirs();//将父文件夹与子文件夹一起创建
        }
        if(!demoFile.exists()){
            demoFile.createNewFile();//创建文件
        }
        File pp = new File(path,"pp");
        delDirectory(pp);//调用删除文件夹方法下面没有文件则可以成功
    }

//使用遍历方法删除文件夹,如果内部有文件则删除文件,防止无法删除文件夹
    public static void delDirectory(File dir) throws IOException{
        if(!dir.exists()){//如果文件夹不存在,抛出运行时异常
            throw new RuntimeException("文件夹"+dir+"不存在");
        }
        if(!dir.isDirectory()){//判断是否文件夹
            throw new RuntimeException(dir+"不是目录");
        }
        File[] subs = dir.listFiles();
        if(subs!=null&&subs.length>0){//遍历所有子文件和文件夹,删除里面内容
            //遍历所有的subs
            for(File f:subs){
                if(!f.isDirectory()){//不是文件夹就是文件
                    System.out.println("文件名为:"+f.getName());
                    if(!f.delete()){//如果删除失败则抛出异常,如果成功则不进来,文件也删掉了
                        throw new IOException("无法删除文件"+f.getName());
                    }
                }else{//文件夹处理
                    System.out.println("开始处理文件夹"+f.getName());
                    delDirectory(f);//调用删除文件夹方法,删除子文件夹
                    System.out.println("子文件夹已经删除,开始删除该文件夹"+f.getName());
                    f.delete();//删除完子文件和子文件夹后,需要删除当前的文件夹
                }
            }
        }
        dir.delete();//删除dir目录的内容
    }

    //使用过滤器过滤掉一部分文件,处理符合规则的文件
    public void testFile04(){
        File file = new File("src"+File.separator+"day07");//创建文件对象
        FileFilter filter = new FileFilter(){
            //该方法用于定义过滤规则,如果return true则表示符合规则的
            //返回值为false  则表示不符合规则的
            @Override
            public boolean accept(File pathname) {
                //matches匹配符合正则表达式规则的内容
                if(pathname.getName().matches(".*[.]java")){
                    return true;
                }
                return false;
            }
        };
        //传入过滤器对象,过滤掉不符合规则的file对象
        File[] paths = file.listFiles(filter);
        for(File f:paths){
            System.out.println(f.getName());
        }
    }

 

File类的职能:
Java的io包中定义了File类,用于对文本或文件夹的管制操作。
File类只好够用于表示文件或文件夹的新闻(属…

一 、创立文件夹

功能

当大家必要在网页中贯彻公文上传功用的时候,file控件就足以大显身手了。HTML文书档案中每添加二个 <input type=”file”> ,实际正是成立了2个FileUpload实例对象。用户能够透过点击file控件选取本三步跳件,当大家付出包蕴该file控件的表单时,浏览器会向服务器发送用户选中的地头文件。从而将地方文件传输到服务器,供其余互联网用户下载或应用,完结公文上传功用。

  看上边的叙说,file控件貌似挺强大的,事实上也是如此的。但骨子里支出中我们也能够挑出file控件的重重题目:

 

美中不足

无可厚非,file控件很强大,给网页上传文件带来了极大的福利。不过,它并非全盘!

先是,从控件本身而言,大家能够通过value属性获取到用户挑选的文件名称,但出于安全性等元素考虑,该属性不能钦点默许值,并且该属性为只读属性。

说不上,或者也是file控件令许多开发者脑瓜疼的地点。file控件在相继主流浏览器之间的变现大有差异,给用户带来的视觉感受大相径庭,而且差不离不只怕通过间接修改样式来达到统一,上边笔者用一张图来更清晰的告诉我们:

图片 1

侦查破案了啊?更可恶的是“选择文件”、“Browse…”、“浏览…”三处文字均无法转移!!但是,那但是是视觉上的歧异,不相同浏览器下file控件的表现也设有部分区别:

  • A① 、A贰 、A三 、卡罗拉、A6,五处大家均能够单击触发文件选用
  • A5 处大家却须求双击才能接触文件选用

总而言之,file控件从暗许视觉效果和互相体验方面来讲,是开发人士和普通用户都很难接受的。

  壹 、我们可以由此value属性获取用户采纳的公文的名目,但出于安全因素,该属性只读,所以也就不恐怕内定默许值。

File file_1 = new File(File.separator + “mnt” + File.separator +
“sdcard” + File.separator);

道高级中学一年级尺,魔高级中学一年级丈

既然如此默许的事物我们都不可能接受,那么不可能接受的事物大家就要去改变它。

通过许多开发者的继续不停实践注解,大家不能够经过变更宽度,中度,来决定file控件中按钮的尺码,但是大家得以因此设置file控件的字体大小(font-size)来改变那些按钮的尺码,更令人可观的是主流浏览器对转移font-size的表现是同一的。

那正是说,聪明的开发者们就有了回答之策了。

率先,我们在此以前方表现行反革命差描述中可以发现A贰 、明锐、A6,三处均可单击触发文件选取文件,并且那三处还有1个共同点——它们平均高度居控件左边,那么大家就能够转移控件字体大小,让左边这一局地丰裕大,并且只让用户看见这一区域(或一些),并且只让用户操作该区域,那么A5处交互成效不雷同的标题就能够消除了。为了达到那个目标,大家得以在file控件外面包裹一层容器,并安装尺寸,通过固定将file控件左侧区域突显到目的区域,并为容器设置溢出隐藏( overflow: hidden )。笔者恐怕用代码来表明呢:

XHTML

<style> .file-group { position: relative; width: 200px; height:
80px; border: 1px solid #ccc; /* 为了展现可知区域,非必须 */
overflow: hidden; } .file-group input { position: absolute; right: 0;
top: 0; font-size: 300px; } </style> <div
class=”file-group”> <input type=”file” name=”” id=”J_File”>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<style>
    .file-group {
        position: relative;
        width: 200px;
        height: 80px;
        border: 1px solid #ccc; /* 为了显示可见区域,非必须 */
        overflow: hidden;
    }
    .file-group input {
        position: absolute;
        right: 0;
        top: 0;
        font-size: 300px;
    }
</style>
<div class="file-group">
    <input type="file" name="" id="J_File">
</div>

在浏览器中查看上边代码的效应,鲜明Chrome、Firefox、IE下展现效果显然太分裂等了(其实文字被推广挤出可知区域了,大约什么都看不到),那么怎么应对啊?所谓“道高级中学一年级尺,魔高一丈”,那里大致的法则正是让file控件处于较高的层(z-index),并且安装透明(opacity,低版本IE用filter),让前面包车型大巴要一向安装样式,以此达到视觉风格统一。说得不是很了然,依然直接上代码吧:

XHTML

<style> .file-group { position: relative; width: 200px; height:
80px; border: 1px solid #ccc; /* 为了展现可知区域,非必须 */
overflow: hidden; cursor: pointer; line-height: 80px; font-size: 16px;
text-align: center; color: #fff; background-color: #f50;
border-radius: 4px; } .file-group input { position: absolute; right: 0;
top: 0; font-size: 300px; opacity: 0; filter: alpha(opacity=0); cursor:
pointer; } .file-group:hover { background-color: #f60; } </style>
<div class=”file-group”> <input type=”file” name=””
id=”J_File”> 选用文件 </div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<style>
    .file-group {
        position: relative;
        width: 200px;
        height: 80px;
        border: 1px solid #ccc; /* 为了显示可见区域,非必须 */
        overflow: hidden;
        cursor: pointer;
        line-height: 80px;
        font-size: 16px;
        text-align: center;
        color: #fff;
        background-color: #f50;
        border-radius: 4px;
    }
    .file-group input {
        position: absolute;
        right: 0;
        top: 0;
        font-size: 300px;
        opacity: 0;
        filter: alpha(opacity=0);
        cursor: pointer;
    }
    .file-group:hover {
        background-color: #f60;
    }
</style>
<div class="file-group">
    <input type="file" name="" id="J_File">
    选择文件
</div>

最终大家再看下各浏览器表现一样的末段突显效果及互动体验:

图片 2

OK,到那里大家到底对file控件有个简易的认识了,后边笔者还会提供更加多file控件或基于file控件延伸出来的相关材料,有趣味的意中人能够不断关心。

1 赞 3 收藏
评论

图片 3

  二 、最让我们诟病的是,file控件在差别浏览器上长相迥异。那让我们开发者情何以堪?而且“选择文件”、“浏览…”等字样均无法修改。更可恶的是IE9中file控件类似于输入框的地方须求双击才能接触文件接纳。那样的视觉效果与互动体验真正让大家无能为力承受。

 

  so,近日周边的缓解方案是那样的:

if(!file_1.exists()){//判断文件夹是不是留存(不设有则创立那么些文件夹)

  在file控件外面包裹一层容器,并安装其尺寸,通过一定将file控件右侧区域(因为IE9中file控件左边区域单击无效)彰显到对象区域,并为容器设置溢出隐藏。同时,为了让控件可被点击,大家让file处于较高的层并设置透明,只让容器样式可见,以此达到视觉与相互风格的联合。见代码:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图