【Java基础知识】IO流--File类和路径分隔符

来源:互联网 发布:程序怎么变成软件 编辑:程序博客网 时间:2024/06/14 18:05

IO流–FIle类和路径分隔符

1 File类

1.1 File类概述

我们想要操作IO,就必须知道硬盘上文件的表现形式。File类:IO类包中唯一代表文件本身的对象,文件和目录(文件夹)路径名的抽象表示形式。File类提供各种方法,我们可以创建、删除、重命名文件,判断文件的读写权限,是否存在,设置和查询文件的最近修改时间。File类不能访问文件的内容,不能够从文件中读取数据或往文件里写数据,它只能对文件本身的属性进行操作。

1.2 File类的构造方法

File(String pathname):根据一个路径得到File对象。File(String parent, String child):根据一个目录和一个子文件/目录得到File对象File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象。

1.3 创建File对象

【要注意区分你所创建的是文件夹,还是文件】

public boolean createNewFile():创建文件,创建成功返回true, 如果存在这样的文件,就不创建了,返回falsepublic boolean mkdir():创建文件夹【父目录必须存在】,如果存在这样的文件夹,就不创建了。public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来。

1.4 删除File对象

public boolean delete():删除此抽象路径名表示的文件或目录。如果要删除一个文件夹,则所给文件夹必须为空才可删除【即该文件夹内不能包括文件或文件夹】。在Eclipse中创建文件或文件夹时,如果忘记写盘符,在默认是在项目路径下创建。Java中File对象的删除不走回收站,直接删除。

1.5 重命名

public boolean renameTo(File dest)如果路径名相同,就是改名;如果路径名不同,就是改名并剪切。绝对路径:路径以盘符开始。相对路径:路径不以盘符开始。

1.6 判断类方法

public boolean isDirectory():判断是否是目录public boolean isFile():判断是否是文件public boolean exists():判断是否存在public boolean canRead():判断是否可读public boolean canWrite():判断是否可写public boolean isHidden():判断是否隐藏

1.7 获取文件信息

public String getAbsolutePath():获取绝对路径public String getPath():获取相对路径public String getName():获取名称public long length():获取长度。字节数public long lastModified():获取最后一次的修改时间,毫秒值

1.8 案例一:输出D盘目录下,后缀名以.txt结尾的文件名称

方法一:直接使用File类的基本方法解决
分析:
A:封装e判断目录
B:获取该目录下所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象,然后判断
D:是否是文件
是:继续判断是否以.txt结尾
是:就输出该文件名称
否:不处理
否:不处理

public class FileDemo {    public static void main(String[] args) {        File file = new File("D:\\");        File[] fileArray = file.listFiles();        for(File f : fileArray){            if(f.isFile() && f.getName().endsWith(".txt")){                System.out.println(f.getName());            }                   }       }}/*运行结果: * 摸金天师.txt * 盗墓笔记.txt * 鬼吹灯.txt * */

方法二:使用文件过滤器作为参数,调用list(filter)或者listFiles(filter)方法。
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
调用List()方法,并且传入FilenameFilter 对象作为参数。
FilenameFilter接口的源码如下:

publicinterface FilenameFilter {    //测试指定文件是否应该包含在某一文件列表中。    //参数:File被找到的文件所在的目录,name文件的名称。    boolean accept(File dir, String name);}

public String[] list(FilenameFilter filter)源码如下:

    public String[] list(FilenameFilter filter) {    String names[] = list();    if ((names == null) || (filter == null)) {        return names;    }    ArrayList v = new ArrayList();    for (int i = 0 ; i < names.length ; i++) {        if (filter.accept(this, names[i])) {        v.add(names[i]);        }    }    return (String[])(v.toArray(new String[v.size()]));    }

代码案例:

public class FilenameFilterDemo {    public static void main(String[] args) {        File file = new File("D:\\");        //将实现FilenameFilter接口的匿名类作为list()的参数        String[] strArray = file.list(new FilenameFilter() {        @Override        public boolean accept(File dir, String name) {                return new File(dir, name).isFile() && name.endsWith(".txt");            }        });        for (String s : strArray) {            System.out.println(s);        }    }}/*运行结果: * 摸金天师.txt * 盗墓笔记.txt * 鬼吹灯.txt * */

1.9 案例二:将D盘下的文件名称批量重命名

E:\电视剧\汉武大帝\汉武大帝001[电视剧迅雷下载电影天堂]_汉景帝削藩.avi,
改为:E:\评书\三国演义\001_汉景帝削藩.avi

public class FileRenameDemo {    public static void main(String[] args) {        //E:\电视剧\汉武大帝\汉武大帝_001_[电视剧_迅雷下载_电影天堂]_汉景帝削藩.avi        File srcFolder = new File("E:\\电视剧\\汉武大帝");        File[] fileArray = srcFolder.listFiles();        for (File file : fileArray) {            String name = file.getName();             int index = name.indexOf("_");            String numberString = name.substring(index + 1, index + 4);            int endIndex = name.lastIndexOf('_');            String nameString = name.substring(endIndex);            String newName = numberString.concat(nameString);//001_汉景帝削藩.avi            //System.out.println(newName);            File newFile = new File(srcFolder, newName);             file.renameTo(newFile);            //修改后:E:\评书\三国演义\001_汉景帝削藩.avi        }    }}

2 路径分隔符需要注意的问题

2.1 各系统的路径分隔表示

Unix和Mac下的路径分隔符为:【/ 】
DOS下的路径分隔符为:【\】
Java可以正确处理Unix和Dos的路径分隔符:
即使我们在Windows下使用(/)作为路径分隔符,Java仍然能够正确处理。
由于反斜线用来表示转义字符,因此,表示路径分隔符需用两个反斜线。
在Java程序中我们使用\表示单反斜线(),使用\\表示双反斜线(\).

2.2 编程中如何处理路径分隔符

路径分割符号问题,不同的操作系统不同,在程序中不要硬性编码与平台相关的任何常量.
可以使用File.separator得到不同系统下的路径分隔符。
String sep = File.separator;
file = new File(“d:”+sep+”develop”, “data.txt”);

public class SeparatorDemo {    public static void main(String[] args) {        String sep = File.separator;        File file =new File("E:"+sep+"E-Book"+sep+"leetcode-cpp刷题.pdf");        System.out.println(file.getAbsolutePath());    }}/* * E:\E-Book\leetcode-cpp刷题.pdf * */
0 0
原创粉丝点击