Java IO学习总结

File

一.概念

java.io
    将字符串形式的路径,封装成File类,File类提供了大量的直接操作文件和文件夹的方法。

二.File的静态常量

static String pathseparator
    与系统有关的路径分隔符
    返回“;”--------路径和路径用“;”隔开 (比如环境变量)

static String separator
    与系统有关的默认名称分隔符
    返回“\”--------文件名和文件名用“\”隔开

将来开发要求我们写的代码要跨平台
Windows上的路径名称分隔符是 \\
Linux上的路径名称分隔符是 /

String path = "G:\\idea\\io";//如果这样写,到Linux系统上直接就废废了

String path = “G:”+File.separator+"idea"+File.separator+"io";//这才是标准写法!

三.构造方法

File(File parent, String child)
    根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

File(String pathname)
    通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child)
    根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

四.获取File

File getAbsoluteFile()
    返回此抽象路径名的绝对路径名形式。

String getPath()
    将此抽象路径名转换为一个路径名字符串。

String getName()
    返回由此抽象路径名表示的文件或目录的名称。

long length()
    返回由此抽象路径名表示的文件的长度。

File getParentFile()
    返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

五.相对路径和绝对路径

    绝对路径:
        从盘符开始写

    相对路径:
        都有一个参照,相对于那个路径,那个路径就是参照
idea中文件的路径都是以我们项目(project)的根路径为参照的(哪个路径作为参照路径,哪个路径就可以不写)
        idea中写相对路径:从模块开始写

六.File的创建方法

boolean createNewFile()
    当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

boolean mkdir()
    创建单级文件夹

boolean mkdirs()
    创建多级文件夹

七.File类的删除方法

public boolean delete():
    删除由此File表示的文件或者文件夹

 结论:不要随意使用
      1.删除文件夹的时候,只能删除空文件夹
      2.此方法删除之后,不走回收站

八.File类的判断方法

public boolean exists()
    判断我们指定的文件或者文件夹是否存在的
    如果不存在,返回值false
    如果存在,返回的是true

public boolean isDirectory()
    判断是否为文件夹
    如果不是,返回false
    如果是,返回true

public boolean isFile():
    判断是否为文件
    如果不是,返回false
    如果是,返回true

九.File的遍历方法

public String[] list():
    获取指定文件夹路径下的文件夹以及文件的名字(路径)

public File[] listFiles():
    获取指定文件夹路径下的文件夹以及文件路径,把他们封装成File对象


IO

一.分类

字节流:一切皆字节(图片/音乐/视频/文字)
    字节输出流:OutputStream
    字节输入流:InputStream
字符流:操作字符的(主要操作的是保存在文本文档中的内容比如.txt .html .css等)
    字符输出流:Writer
    字符输入流:Reader

二.字节流

字节输出流

因为是抽象类所以我们直接操作他的子类FileOutputStream
1.构造
参数指定我们数据写到哪个位置
我们自定义的文件即使没有,自动创建,如果已经存在,在创建,会把先创建的文件覆盖掉。

  • FileOutputStream(File file)
  • FileOutputStream(String name)

2.所有的流通用的写法
1.创建对象
2.写数据或读取数据
3.关流–>close()

3.方法

  • void write(int b)->一次写一个字节
  • void write(byte[] b)->一次写一个字节数组
  • void write(byte[] b, int off, int len)->一次写一个字节数组一部分
                byte[] b:要写哪个字节数组中的内容
                off:从数组的哪个索引开始写
                len:写多少个
  • void close()->关闭流对象

    当我们想要利用字节流随意的往文件里写字符,但是又不知道该字符对应的ASCII码表对应的数字,那么我们可以用下面这个方法
“要写到文件的字符串”.getbytes();---->将字符串转化为字节数组。

4.FileOutputStream的续写功能

  • FileOutputStream(String name,boolean append)
    append:默认false(不追加内容)
                        true(追加内容)

5.换行符:
windows:\r\n
Linux : \n
但是这样换行也不能实现跨平台

字节输入流

    因为是抽象类所以我们直接操作他的子类FileInputStream

1.构造
参数传递要读取的文件位置

  • FileInputStream(File file)
  • FileInputStream(String name)

2.方法

  • int read():读一个字节
  • int read(byte[] b):读取一个字节数组
  • int read(byte[] b, int off, int len):读一节字节数组
                b:要读取的字节数组
                off:从哪个索引开始读
                len:读多少个
  • void close():关闭资源

3.循环读取一个字节
我们在对应的.txt文件中存入abc三个字符

public static void main(String[] args) throws IOException {
   
        FileInputStream fis = new FileInputStream("day15\\a.txt");

        int read1 = fis.read();
        System.out.println(read1);

        int read2 = fis.read();
        System.out.println(read2);

        int read3 = fis.read();
        System.out.println(read3);

        int read4 = fis.read();
        System.out.println(read4);
    }

运行结果
通过以下代码运行结果我们可以看到,当调用了4个读取一个字节的方法时,最后以获取到的是-1,至于为什么返回的负一,这个不得而知,因为这方法的底层是native方法,c语言写的本地方法。
这只是有3个字符,当有很多个字符一个一个的写显然不怎么样!那么竟然读不到数据返回-1,我们可以利用这个条件作为循环条件来读。

public static void main(String[] args) throws IOException {
   
        FileInputStream fis = new FileInputStream("day15\\a.txt");

        int len = 0;
        //如果读不到数据了len = fis.read()这是len的值就是-1,就会停止循环
        while ((len = fis.read())!= -1){
   
            System.out.</
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值