file 类的一些理论知识

参考:https://blog.csdn.net/wei_zhi/article/details/52933233

          https://blog.csdn.net/love_bb/article/details/23304645


在Java编程中,IO(输入输出)是重要的组成部分,Java应用常常需要从外界输入数据或者把数据输出到外界。

Java IO的核心用一句话概括:抽象类或接口之中的抽象方法会根据实例化子类的不同,会完成不同的功能。所有的IO操作都在java.io包之中进行定义,而且整个java.io包实际上就是五个类和一个接口: 
(1)五个类:File、InputStream、OutputStream、Reader、Wirter; 
(2)一个接口:Serializable。

1、文件类对象实例化

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

(1)public File(String pathname);//主要在Java EE的开发之中

(2)public File(File parent, String child);//主要在Android开发之中

2、文件的基本操作

文件的基本操作,主要有两种功能:创建和删除 
(1)创建文件:

public boolean createNewFile() throws IOException;
  • 1

(2)删除文件:

public boolean delete();

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

(1)关于路径分隔符

在windows操作系统之中,使用“\”作为路径分隔符,而在linux系统下使用“/”作为路径的分隔符,而从实际的开发而言,大部分情况下都会在windows中做开发,而后将项目部署到linux下,那么此时,路径的分隔符都需要进行修改,这样实在是过于麻烦,为此在File类之中提供了一个常量:

public static final String separator
  • 1

(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。

所以以上程序实例化File类对象修改为:

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

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

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

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

public File getParentFile();
  • 1

②创建目录:

public boolean mkdirs();
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(); // 创建新文件
        }
    }
}

3、获取文件的基本信息

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

(1)取得文件的名称:

public String getName();
  • 1

(2)给定的路径是否是文件夹:

public boolean isDirectory();
  • 1

(3)给定的路径是否是文件:

public boolean isFile();
  • 1

(4)是否是隐藏文件:

public boolean isHidden();
  • 1

(5)文件的最后一次修改日期:

public long lastModified();
  • 1

(6)取得文件大小:

public long length();
  • 1

是以字节为单位返回的。


三、字节流与字符流的区别

通过以上的代码演示,现在可以发现,对于字节流和字符流可以完成类似的功能,那么在开发之中使用那一种呢?两者的区别:

字节流在进行IO操作的时候,直接针对的是操作的数据终端(例如:文件),而字符流操作的时候不是直接针对于终端,而是针对于缓存区(理解为内存)操作,而后由缓存取操作终端(例如:文件),属于间接操作,按照这样的方式,如果说在使用字节流的时候不关闭最后的输出流操作,也可以将所有的内容进行输出,而字符输出流的时候如果不关闭,则意味着缓冲区之中的内容不会被输出,当然,这个时候可以由用户自己去调用flush()方法进行强制性的手工清空:


对于电脑磁盘或者是网络数据传输上,使用最多的数据类型都是字节数据,包括图片、音乐、各种可执行程序也都是字节数据,很明显,字节数据要比字符数据更加的广泛,但是在进行中文处理的过程之中,字符流又要比字节流方便许多,所以如果要使用的话,首先考虑的是字节流(还有一个原因是因为字节流和字符流的代码形式类似),如果有中文处理的问题,才会考虑使用字符流。



猜你喜欢

转载自blog.csdn.net/qq_30336433/article/details/81065612