文件的操作

这一节我们来讨论关于文件自身的操作

不浪费唾沫了,用代码说话……

实例1:创建文件对象

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
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        //创建要操作的文件路径和名称
        //其中,File.separator表示系统相关的分隔符,Linux下为:/  Windows下为:\\
        //path在此程序里面代表父目录,不包含子文件
        String path = File.separator + "home" + File.separator + "siu" +
                      File.separator + "work" + File.separator;
         
        //childPath在此程序里面代表子目录,包含子文件
        String childPath = File.separator + "home" + File.separator + "siu" +
                           File.separator + "work" + File.separator + "demo.txt";
         
        //用父目录和子文件分隔的方式构造File对象
        //也可以写成 new File("/home/siu/work","test.txt");
        File f1 = new File(path,"test.txt");
         
        //使用绝对路径来构造File对象
        //也可以写成new File("/home/siu/work/demo.txt");
        File f2 = new File(childPath);
         
        //创建父目录的文件对象
        File d = new File(path);
        //使用已有父目录对象和子文件构建新的File对象
        File f3 = new File(d,"hello.txt");
         
        System.out.println("f1的路径" + f1);
        System.out.println("f2的路径" + f2);
        System.out.println("f3的路径" + f3);
    }
}

编译后,显示各个File对象所指向的绝对路径

实例2:创建和删除文件

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
import java.io.File;
import java.io.IOException;
 
public class Demo {
    public static void main(String[] args) {
 
        String Path = File.separator + "home" + File.separator + "siu" +
                           File.separator + "work" + File.separator + "demo.txt";
         
        File f = new File(Path);
         
        try {
            /*因为创建和删除文件涉及到底层操作,所以有可能会引发异常*/
             
            //如果创建成功则会返回true
            //如果已存在该文件,则创建不成功,返回flase,别以为会覆盖
            System.out.println("创建文件:" + f.createNewFile());
             
            //删除文件,成功返回true,否则返回flase
            System.out.println("删除文件:" + f.delete());
             
            //此方法表示在虚拟机退出时删除文件
            //原因在于:程序运行时有可能发生异常造成直接退出
            //清理残余很有必要~!
            f.deleteOnExit();
        } catch (IOException e) {
            e.printStackTrace();
        }  
    }
}

你看,创建成功,所以返回true,因为已经创建好了,所以删除也能成功

实例3:文件的判断和测试

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
33
34
35
36
import java.io.File;
  
public class Demo {
    public static void main(String[] args) {
  
        String Path = File.separator + "home" + File.separator + "siu" +
                           File.separator + "work" + File.separator + "Demo.txt";
          
        File f = new File(Path);
      
        //判断文件是否可执行
        System.out.println("f是否可执行:" + f.canExecute());
          
        //判断文件是否存在
        System.out.println("f是否存在:" + f.exists());
          
        //判断文件是否可读
        System.out.println("f是否可读:" + f.canRead());
          
        //判断文件是否可写
        System.out.println("f是否可写:" + f.canWrite());
          
        //判断文件是否为绝对路径名
        System.out.println("f是否绝对路径:" + f.isAbsolute());
         
        //判断文件是否为一个标准文件
        System.out.println("f是否为标准文件:" + f.isFile());
         
        //判断文件是否为一个目录
        System.out.println("f是否为目录:" + f.isDirectory());
          
        //判断文件是否隐藏
        System.out.println("f是否隐藏:" + f.isHidden());  
          
    } 
}

这里使用不同的文件做测试便可,设置文件属性什么的也很简单

需要注意的是,如果使用isFlie()和isDirectory()进行测试,则先要确定文件对象是否已经创建

实例4:创建目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        String path = File.separator + "home" + File.separator + "siu" +
                      File.separator + "work" + File.separator;
         
        //path在此处作为父目录存在
        File f1 = new File(path,"/abc");
        File f2 = new File(path,"/d/e/f/g");
         
        //创建一个目录
        System.out.println(f1.mkdir());
         
        //递归创建目录
        System.out.println(f2.mkdirs());
         
    }  
}

注意看路径

实例5:获取文件信息

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
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        String path = File.separator + "home" + File.separator + "siu" +
                      File.separator + "work" + File.separator + "demo.txt";
         
        File f = new File(path);
         
        //返回文件的绝对路径
        //此处返回值为String
        System.out.println("f的绝对路径名:" + f.getAbsolutePath());
         
        //返回文件的绝对路径
        //此处返回值为File
        System.out.println("f的绝对路径对象:" + f.getAbsoluteFile());
         
        //返回文件或目录的名称
        System.out.println("f的名称:" + f.getName());
         
        //返回文件的相对路径
        //构造函数中封装的是什么路径,就返回什么路径
        System.out.println("f的路径:" + f.getPath());
         
        //返回父目录的路径
        //如果在构造函数中的路径不是绝对路径,那么此处返回null
        System.out.println("f的父目录:" + f.getParent());
         
    }  
}

这些都是比较常用并且功能类似的方法,至于不常用的信息获取参考API即可

实例6:列出文件系统的根目录

1
2
3
4
5
6
7
8
9
10
11
12
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        //listRoots()是一个静态方法,返回文件数组
        File[] files = File.listRoots();
        //foreach循环打印File对象
        for (File x : files) {
            System.out.println(x);
        }
    }
}

因为本地环境是Linux,所以根目录只有一个 /,如果是Windows就能列出你的所有盘符

实例7:列出目录下的所有文件

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
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        String path = File.separator + "opt" + File.separator;
         
        File f = new File(path);
         
        //方式一:list()
        //返回一个包含指定目录下所有文件名的字符串数组
        //如果不是一个目录则返回null
        String[] files = f.list();
        for (String x : files) {
            System.out.println(x);
        }
         
        //方式二:listFiles()
        //返回File数组
        /*
        File[] files = f.listFiles();
        for (File x : files) {
            //如果需要包含路径,则直接打印x即可
            System.out.println(x.getName());
        }
        */
         
    }
}

两者都是返回目录下的所有文件名,但是第二种方式更实用,为递归列出文件做铺垫

实例8:递归列出目录下所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.File;
 
public class Demo {
    public static void main(String[] args) {
        String path = File.separator + "opt" + File.separator;
         
        File f = new File(path);
        //调用下面的递归方法
        print(f);
    }
     
    //用递归的方式打印目录列表
    public static void print(File f) {
        if(f.isDirectory()){
            File[] files = f.listFiles();
            for(File x : files) {
                print(x);
            }
        } else {
            System.out.println(f);
        }
    }
}

好吧,打印内容太多了,意思意思就行了

I/O操做总结(二)的更多相关文章

  1. 使用robotframework做接口测试二——处理响应数据

    初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...

  2. 还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

    相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案.如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建.元数据自 ...

  3. 游戏引擎网络开发者的64做与不做(二A):协议与API

    [编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...

  4. java Class的Long id初始化 为0的问题android数据库操做出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

    java的class中的Long类型变量调用默认的 构造函数new后会被初始化为0. 这句话大家可能感觉这么低级的事情还用你说? 我想说的是这个会产生的一个应用场景 和 避免方法 场景:db插入时候p ...

  5. Mongodb3.6 基操命令(二)——如何使用help

    前言 在上一篇文章Mongodb3.6 快速入门(一)中,我们主要使用两个命令: 1.mongod #启动服务 2.mongo #连接mongodb 对于刚接触mongo的人来说,该怎么给命令传递参数 ...

  6. Loadrunner教程--常用操做流程

    1loadrunner压力测试一般使用流程 1.1loadrunner压力测试原理 本质就是在loadrunner上模拟多个用户同时按固定行为访问web站点.其中固定行为在loadrunner中是通过 ...

  7. I/O流操做总结(三)

    说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用 但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失 弄不清到底是为了写出东西,还是为了语言本身 我学习的第 ...

  8. javascript使用H5新版媒体接口navigator.mediaDevices.getUserMedia,做扫描二维码,并识别内容

    本文代码测试要求,最新的chrome浏览器(手机APP),并且要允许chrome拍照录像权限,必须要HTTPS协议,http不支持. 原理:调用摄像头,将摄像头返回的媒体流渲染到视频标签中,再通过ca ...

  9. (转)Loadrunner教程--常用操做流程

    1loadrunner压力测试一般使用流程 1.1loadrunner压力测试原理 本质就是在loadrunner上模拟多个用户同时按固定行为访问web站点.其中固定行为在loadrunner中是通过 ...

随机推荐

  1. Merge into使用详解( 同时执行inserts和updates操作 )

    Merge是一个非常有用的功能,类似于MySQL里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...

  2. Elasticsearch官方安装

    Installationedit Elasticsearch requires at least Java 8. Specifically as of this writing, it is reco ...

  3. Mysql 创建存储过程 更新表

    DELIMITER // use protocoldb// drop procedure if exists sp_protocol_Update// create procedure sp_prot ...

  4. Ubuntu 获得超级用户权限

    sudo passwd root 首先要先输入当前用户的密码,再在"输入新的UNIX密码"后面输入你想要设置的 root 密码即可,然后就可以切换到 super user 了: $ ...

  5. FlexPaper+SwfTools实现的在线文档功能

    最近一个项目需要实现一个在线浏览文档的功能.准备使用FlexPaper配合Pdf2Swf实现. 主要需求在于: ➔ 文档页数很多,少则几百页,多则上千页.    ➔ 相应的文档大小也在50MB以上. ...

  6. CF-845C

    C. Two TVs time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  7. IIS7启用GZip压缩

    本文转载自 http://www.cnblogs.com/kissdodog/p/6252129.html GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加, ...

  8. 2. DVWA亲测文件包含漏洞

    Low级:     我们分别点击这几个file.php文件 仅仅是配置参数的变化: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php 如 ...

  9. UVaLive 4094 WonderTeam (贪心)

    题意:有n支队伍,每两支队伍打两场比赛(主客场各一次),胜得3分,平得1分,输不得分,比赛结束之后会评选出一个梦之队, 梦之队满足以下条件:进球总数最多,胜利场数最多,丢求总数最少,三个都不能并列,求 ...

  10. yzm10的ACM集训小感

    7月30号,ACM集训进行了两周,一切都已on the right way.这时的我适时地从题海中探出头,其实除了刷题,也该写点什么来总结下过去.首先,在第一周里,我学习了数据结构,知道了STL这么一 ...