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()方法进行强制性的手工清空:
对于电脑磁盘或者是网络数据传输上,使用最多的数据类型都是字节数据,包括图片、音乐、各种可执行程序也都是字节数据,很明显,字节数据要比字符数据更加的广泛,但是在进行中文处理的过程之中,字符流又要比字节流方便许多,所以如果要使用的话,首先考虑的是字节流(还有一个原因是因为字节流和字符流的代码形式类似),如果有中文处理的问题,才会考虑使用字符流。
上一篇: vue-cli3构建ts项目