zoukankan      html  css  js  c++  java
  • JavaIO操作(1)文件操作类

    3、具体内容

    Java SE的四大核心知识点:面向对象、类集框架、Java IO、JDBC。

    Java IO的核心就一句话解释:如果抽象类或接口之中的抽象方法被子类所覆写了,那么实例化这个子类的时候,所调用的方法一定是被覆写过的方法

    所有的IO操作都在java.io包之中进行定义,而且整个java.io包实际上就是五个类和一个接口:

    · 五个类:File、InputStream、OutputStream、Reader、Wirter;

    · 一个接口:Serializable。

    3.1、文件操作类:File(重点)

    在整个java.io包之中,File类是唯一的一个与文件本身操作有关的类,所谓的文件本身指的是:文件的创建、删除、重命名、取得文件大小、修改日期。

    如果要想使用File类操作文件的话,那么肯定要通过构造方法实例化File类对象,而实例化File类对象的过程之中主要使用以下两种构造方法:

    · Java EE的开发之中:public File(String pathname);

    · Android开发之中:public File(File parent, String child)。

    范例:文件的基本操作,主要有两种功能:

    ·创建文件:public boolean createNewFile() throws IOException;

    ·删除文件:public boolean delete();

    · 判断路径是否存在:public boolean exists();

    package cn.mldn.demo;

    import java.io.File;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:\\demo.txt"); // 文件的路径

    if (file.exists()) { // 文件存在

    file.delete(); // 删除文件

    } else { // 文件不存在

    file.createNewFile(); // 创建新文件

    }

    }

    }

    本程序操作就表示文件如果存在则删除,如果不存在,则创建一个新的文件,此时基本功能是实现了,不过这个程序此时却存在了三个问题:

    问题一:关于路径分隔符

    在windows操作系统之中,使用“\”作为路径分隔符,而在linux系统下使用“/”作为路径的分隔符,而从实际的开发而言,大部分情况下都会在windows中做开发,而后将项目部署到linux下,那么此时,路径的分隔符都需要进行修改,这样实在是过于麻烦,为此在File类之中提供了一个常量:public static final String separator(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。

    File file = new File("D:" + File.separator + "demo.txt"); // 文件的路径

    问题二:是有可能(本人没出现过,学生出现过)会出现的问题

    发现当程序执行完成之后,对于文件的创建或者是删除是会存在一些操作上的延迟,如果现在假设先删除了一个文件,而后立刻判断此文件是否存在,那么可能得到的结果就是错误的(为true),因为所有的*.class文件都要通过JVM与操作系统间接操作,这样就有可能会出现延迟的问题。

    问题三:之前进行文件创建的时候都是在根路径下创建完成的,如果说现在要创建的文件有目录呢?例如,现在要创建一个d:\hellodemo\my\test\demo.txt文件,而此时在执行程序的时候hellodemo目录不存在,这个时候执行的话就会出现错误提示:

    Exception in thread "main" java.io.IOException: 系统找不到指定的路径。

    因为现在目录不存在,所以不能创建,那么这个时候必须要首先判断要创建文件的父路径是否存在,如果不存在应该创建一个目录,之后再进行文件的创建,而要想完成这样的操作,需要以下几个方法的支持:

    · 找到一个指定文件的父路径:public File getParentFile();

    · 创建目录:public boolean mkdirs()。

    package cn.mldn.demo;

    import java.io.File;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:" + File.separator + "hellodemo"

    + File.separator + "my" + File.separator + "test"

    + File.separator + "demo.txt"); // 文件的路径

    if (!file.getParentFile().exists()) { // 父路径不存在

    file.getParentFile().mkdirs(); // 创建目录

    }

    if (file.exists()) { // 文件存在

    file.delete(); // 删除文件

    } else { // 文件不存在

    file.createNewFile(); // 创建新文件

    }

    }

    }

    以后在任何的java.io.File类开发的过程之中,都一定要考虑文件目录的问题。

    除了以上的常用的方法之外,在File类之中还可以通过以下的方法取得一些文件的基本信息:

    · 取得文件的名称|:public String getName();

    · 给定的路径是否是文件夹:public boolean isDirectory();

    · 给定的路径是否是文件:public boolean isFile();

    · 是否是隐藏文件:public boolean isHidden();

    · 文件的最后一次修改日期:public long lastModified();

    · 取得文件大小:public long length(),是以字节为单位返回的。

    package cn.mldn.demo;

    import java.io.File;

    import java.math.BigDecimal;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:" + File.separator + "eclipse.zip"); // 文件的路径

    if (file.exists()) { // 文件存在

    System.out.println("文件名称:" + file.getName());

    System.out.println(file.getName()

    + (file.isDirectory() ? "是一个目录。" : "不是一个目录。"));

    System.out.println(file.getName()

    + (file.isFile() ? "是一个文件。" : "不是一个文件。"));

    System.out.println(file.getName()

    + (file.isHidden() ? "是一个隐藏文件。" : "不是一个隐藏文件。"));

    System.out.println("最后一次更改日期:"

    + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")

    .format(new Date(file.lastModified())));

    System.out.println("文件大小:"

    + new BigDecimal(file.length() / (double) 1024 / 1024)

    .divide(new BigDecimal(1), 2,

    BigDecimal.ROUND_HALF_UP).doubleValue()

    + "M。");

    }

    }

    }

    范例:为一个文件重命名,使用File类可以为文件执行重命名的一个操作,操作方法:public boolean renameTo(File dest),在这个方法上需要传入一个File类对象,而这个对象就表示新的名字。

    package cn.mldn.demo;

    import java.io.File;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:" + File.separator + "eclipse.zip"); // 文件的路径

    if (file.exists()) { // 文件存在

    File newFile = new File("D:" + File.separator + "世界末日的eclipse.zip");

    file.renameTo(newFile);

    }

    }

    }

    在File类之中有一个非常重要的方法,可以列出一个指定目录下的全部文件信息:

    · 列出目录内容:public File[] listFiles(),此方法将目录中的所有文件以File对象数组的方式返回;

    范例:列出指定的目录内容

    package cn.mldn.demo;

    import java.io.File;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:" + File.separator + "javademo"); // 文件的路径

    if (file.exists()) { // 文件目录存在

    File result[] = file.listFiles(); // 列出目录中的全部内容

    for (int x = 0; x < result.length; x++) {

    System.out.println(result[x]);

    }

    }

    }}

    那么下面继续做一个稍微复杂点的应用,现在希望可以将一个目录之中的全部文件都列出来,那么这种情况下只能采用递归:因为列出一个目录下的全部文件或文件夹之后,如果发现列出的内容是文件夹,则应该向后继续列出。

    〖了解〗范例:列出指定目录下的全部内容

    package cn.mldn.demo;

    import java.io.File;

    public class TestDemo {

    public static void main(String[] args) throws Exception {

    File file = new File("D:" + File.separator); // 文件的路径

    print(file);

    }

    public static void print(File file) {

    if (file.isDirectory()) { // 给的路径是文件夹

    File result[] = file.listFiles(); // 列出此目录中的全部内容

    if (result != null) {

    for (int x = 0; x < result.length; x++) {

    print(result[x]);

    }

    }

    }

    System.out.println(file);

    }}

    当然,如果此时可以将输出操作变为删除操作(file.delete();),就表示彻底清空。

  • 相关阅读:
    体温填报APP--流程设计
    构建之法阅读笔记(一)
    家庭记账本(七)
    家庭记账本(六)
    家庭记账本(五)
    家庭记账本(四)
    家庭记账本(三)
    家庭记账本(二)
    家庭记账本(一)
    20210207 BaseAdapter
  • 原文地址:https://www.cnblogs.com/guwenren/p/3012125.html
Copyright © 2011-2022 走看看