目录
2.InputStream和OutputStream中方法的使用
一.File类
1.File类介绍
在java中为了我们方遍操作文件,在标准库给了一个File类,因此操作文件就可以使用File类进行操作.
java中通过java.io.File类对一个文件(包括目录)进行抽象描述.注意,有File对象,并不代表真实存在该文件
2.File类中方法的介绍
我们先来看看File类中常见的属性.构造方法和 方法:
属性:
构造方法:
方法:
3.相对路径和绝对路径的介绍
有一个构造方法为File(String pathname),这里是给File类传一个具体的路径,通过这个路径来指定唯一的一个文件(可能是普通文件,也可以是目录文件).
在实际开发中,表示一个路径,通常有两个方式: 1.绝对路径:C:\java-language\java-language\20220307\src\JavaFile就是一个绝对路径.绝对路径是一个盘符开头的理解. 2.相对路径:一般是以.或..开头的。一个.表示当前的基准目录,两个.就表示当前基准目录退回的上一级等待目录。以基准目录为基准去找对应的目录
此时如果以C:\java-language\java-language\20220307\src为基准目录,此时要表示javaFile的文件,相对路径可以写作:.\javaFile,.就表示当前的基准目录.
4.1方法的使用
构造方法中有一个File(String pathname),传入的可以是一个绝对路径,也可以是一个相对路径。例如:File file = new File("c:\test.txt");
public static void main(String[] args) throws IOException {
File file=new File("c;/test.txt");
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
这样的打印结果不太明显,可以换为相对路径观察:
打印结果:
4.2其他方法的使用
我们可以先在该文件目录底下创建一个helloword.txt.
运行结果:
接下来我们利用代码创建helloworld.txt:
当 我们调用createNewFile方法的时候会抛出一个异常让我们处理,也就是说创建文件可能会失败,那么创建文件为什么会抛出异常呢? 两个理由:1.没有权限。文件系统中的权限,典型的就是读和写,会针对不同的用户,给予不同的权限. 2.磁盘空间不足。
演示delete方法:deleteOnExit方法是等JVM运行结束才删除文件。
可能在 IDEA左侧中没有显示出helloworld.txt,但在文件目录的路径底下可以看到helloworld.txt先创建了,过了 3s又自动删除了.
关于deleteOnExit方法: 该方法主要用于一些临时文件,例如当我们使用word或者Excel,打开文件时候,系统会同时生成一个临时的隐藏文件.把word或者Excel光了的时候,该临时文件就会自动删除
如果在文件中写了很多内容,此时突然断电没有保存,就是相当于在内存中写,如果断电,内存中的数据就会丢失,这样造成的损失很大.
当在写文件的时候,临时文件一直存在,除非是正常关闭它,临时文件才会销毁。断电后重新有了电,我们可以通过临时文件来恢复数据,就能够知道上次是异常结束,会提示用户是否恢复数据.
使用list和listFiles方法:
如果不使用Arrays.toString方法去打印数组里的值,则打印的结果是Stringd类型和引用的哈希值.
打印结果为null,那么说明这个helloworld.txt文件不是一个目录文件.因此它没有子目录
运行结果:
一道经典面试题: 给你一个list方法,遍历一个目录中所有的文件(包含子目录中的文件)能够打印当前文件目录的所有子文件
mkdir和mkdirs的使用: mkdir方法是用来创建一个文件的.不能用mkdir来创建目录.而mkdirs是用来创建目录的
renameTo方法的使用:该文件不仅能够用来该文件的名字,还可以移动文件(把一个文件从一个目录移到到另外一个目录)
用renameTo移到文件:
可以看到原本在基准目录底下的test.txt被转移到out文件底下.
三.InputStream和OutputStream的使用
1.InputStream和OutputStream的介绍
在java标准库中,读写相关的类很多:InputStream和FileInputStrea为文件读取操作,按照字节为单位进行读写文件. OnputStream和FileOnputStream为文件写入操作,按照字节为单位进行写文件.
2.InputStream和OutputStream中方法的使用
2.1InputStream中的方法的使用
InputStream只是一个抽象类,要使用还需要具体的实现类.关于InputStream的实现类要很多,基本可以认为不同的输入设备都可以对应一个InputStream类,我们 现在只关心从文件中读取,所以使用FileputStream
FileInputStream概述: 构造方法
将文件完全读完的两种方式.相比较而言,后一种的IO次数更少,性能更好
上面两个代码需要注意的细节 1.如果使用流对象,一定要记得关闭资源.而java中提供了try with resource语法,在try语快结束后流对象会自动关闭.注意:只有实现了Closeable接口的流对象才可以在try wih resource语法中使用.
2.2 OutputStream中的方法
说明:
OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream
write方法:
注:一旦按照 OutputStream 的方式打开文件, 就会把文件的原来的内容给清空掉
2.我们以字节数组的方式写入数据:
3.可以将字符串转为字节数组写入,这样写入的速度更快:
4.使用 PrintWriter 类来包装一下 OutputStream 然后可以更方便的进行写数据。这样写入的是字母和中文都没有问题。