目录
上篇博客我们详情介绍了文件系统的相关知识。在文件系统操作中,由于文件是在硬盘上的,直接写代码不好操作,所以,我们通过创建File类对象,调用file类对象来间接访问硬盘上的文件。
1.文件系统操作
File 类
1、创建File类对象
File file=new File("d:/xixi.jpg");
通过文件绝对/相对路径进行初始化。
2、File类常用方法:
代码演示:
public static void main(String[] args) throws IOException {
//1.创建一个file类
File file=new File("d:/xixi.jpg");
/*
File file=new File("d:/xigua/xixi.jpg");
System.out.println(file.getName());//返回文件/目录名 xixi.jpg
System.out.println(file.getParent());//返回父目录 d:/xigua
System.out.println(file.getPath());//返回路径名字符串 d:/xigua/xixi.jpg
System.out.println(file.getAbsolutePath());//返回绝对路径名字符串 d:/xigua/xixi.jpg
System.out.println(file.getCanonicalPath());//返回规范路径名字符串D:/xigua/xixi.jpg*/
System.out.println(file.exists());//文件是否存在 true
System.out.println(file.isDirectory());//文件是否为目录 false
System.out.println(file.isFile());//文件是否为普通文件 true
}
2.文件内容操作
InputStream, OutputStream 类是处理二进制文件的,以字节流为基本单位。
-
InputStream
1.创建InputStream类对象
观察源码发现InputStream是一个抽象类,不能直接new对象。我们通过实例化它的子类FileInputStream来创建对象。
InputStream inputStream=null;
try {
inputStream=new FileInputStream("d:/student.txt");
}finally {
inputStream.close();
}
注意一定不要忘记最后的close操作。但是上述的代码可以进行优化的。在Java中,还存在try with resources 这个操作。它是带有资源的try操作,会在try代码块结束后,自动进行close关闭操作。
try(InputStream inputStream=new FileInputStream("d:/student.txt")){
}
指定一个要读的文件
这是由于InputStream实现了Closeable接口
2.读文件
首先,我们要读取的文件student.txt的内容为:
我们通过read()方法,while循环进行读取,当读到文件结尾是,结束,跳出循环。
try( InputStream inputStream=new FileInputStream("d:/student.txt")){
while(true){
int ret=inputStream.read();//无参相当于一次读一个字节
if(ret==-1){
break;
}else{
System.out.println(ret);//ascii码值
}
}
}
结果:
按照ascii码表,可解析出数据为20201209004cjw.
如果是汉字的话:每个汉字三个字节(一个数字一个字节)。(utf-8)
将student.txt的内容修改成小曹,运行,发现结果:
我们通过网站查看utf-8字符编码,将上述读取的字节内容以16进制的格式打印。
System.out.printf("%x\n",ret);
查看结果:
与上述一个字节一个字节的读取对上了。
-
OutputStream
1.创建OutputStream类对象
try {
OutputStream outputStream=new FileOutputStream("d:/student2.txt");
}catch (IOException e){
e.printStackTrace();
}
2.写文件
try {
OutputStream outputStream=new FileOutputStream("d:/student2.txt");
outputStream.write(97);
}catch (IOException e){
e.printStackTrace();
}
查看student2.txt:
注:read()可以一次读取一个字节或多个字节;write()也可以一次写一个字节或多个字节。
总
File类是基于文件系统操作的,主要用于创建/删除文件,创建目录,判断当前是普通文件海还是目录,返回绝对/相对路径等等.InputStream和OutputStream是基于文件内容的,打开文件,读取内容,写入内容.