JavaIO流基础之文件读写

File类

从jdk文档上描述,File类是文件和目录路径名的抽象表示形式。简单明了。
在创建File的时候指定路径就好了。

    File file = new File("H:\\file.txt");//绝对路径
    File file = new File(".\\file.txt");//当前文件夹下

getCanonicalPath方法可以获取完整的路径。

File类不单是文件,也可以是目录。

    file.isDirectory();//判断是否为目录
    file.isFile();//判断是否为文件

如果指定路径的文件不存在,进行读写操作,是会抛出FileNotFoundException异常。所以以防万一,最好先判断是否存在,不存在则创建。

    if(!file.exists()){//判断是否存在
        try {
            file.createNewFile();//创建文件
        } catch (IOException e) {
        }
    }

创建目录也差不多

    if (!file.exists()) {//判断是否存在
        file.mkdir();//创建目录
    }

使用上面的方法创建多层不存在的目录,并不能一口气写下不存在的路径。因为系统会找不到指定路径。那就循环创建吧,不,jdk有提供一个方法可以解决这个问题。就是在mkdir加多一个s。

    if (!file.exists()) {//判断是否存在
        file.mkdirs();//创建目录(包括不存在)
    }

删除很简单

    if (!file.exists()) {//判断是否存在
        file.delete();//删除
    }

读写

使用字节流读

    FileInputStream fis = null;
    ByteArrayOutputStream baos = null;
    try {
        fis = new FileInputStream(file);
        baos = new ByteArrayOutputStream();
        int len = -1;
        byte[] buf = new byte[1024];
        while ((len = fis.read(buf)) != -1) {
            baos.write(buf, 0, len);
        }
        System.out.println(baos.toString());//把txt内容显示在控制台
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
            }
        }
        if (baos != null) {
            try {
                baos.close();
            } catch (IOException e) {
            }
        }
    }

使用字节流写

    ByteArrayInputStream bais = null;
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(file,append);//append是否追加数据
        bais = new ByteArrayInputStream("Hello".getBytes());//写入hello
        int len = -1;
        byte[] buf = new byte[1024];
        while ((len = bais.read(buf)) != -1) {
            fos.write(buf, 0, len);
        }
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
            }
        }
        if (bais != null) {
            try {
                bais.close();
            } catch (IOException e) {
            }
        }
    }

操作都很简单,实现的方式有很多。个人喜欢使用ByteArray字节流来操作IO,熟知这个就基本够了。大家也可以使用其他方式实现。

RandomAccessFile类

java.io包下,还有一个RandomAccessFile类,跟File类没有继承关系的。从名字上意为随机访问文件。简单来说,里面包装输入输出流,还有存在指向该隐含数组的光标或索引,称为文件指针。所以可以在文件长度内指定位置读写,通常用于断点传输数据,比如下载软件暂停,继续下载会从原来的位置开始下载。

    public RandomAccessFile(File file, String mode)//name 路径 mode 权限模式

    public RandomAccessFile(String name, String mode)//name 路径 mode 权限模式

重载两个构造方法,其实指定路径,它自行创建File类和创建不存在的文件。mode参数指的是读写权限,只读——r,可读可写——rw

    RandomAccessFile raf = null;
    try {
        raf = new RandomAccessFile(file, "rw");
        long len = raf.length(); //获取文件长度
        long curPos = raf.getFilePointer(); //获取当前指针位置
        raf.seek(len / 2); //从文件一半的位置开始操作

        ...//一堆的read、write
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
    } finally {
        if (raf != null) {
            try {
                raf.close();
            } catch (IOException e) {
            }
        }
    }

IO流基础讲完了,IO流并不难,基本都是这样。不足之处望指正。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值