文件操作和IO

目录

一.File类

1.File类介绍

2.File类中方法的介绍

3.相对路径和绝对路径的介绍

4.1方法的使用

.InputStream和OutputStream的使用

1.InputStream和OutputStream的介绍

2.InputStream和OutputStream中方法的使用

2.2 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 然后可以更方便的进行写数据。这样写入的是字母和中文都没有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值