java之IO操作详解

# java之IO操作

一.文件的概念

文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音…

二.文件流

文件在程序中是以流的形式来操作的。

流:数据在数据源(文件)和程序(内存)之间经历的路径。

输入流:数据从数据源(文件)到程序(内存)的路径。

输出流:数据从程序(内存)到数据源(文件)的路径。

注:如何判断是输入流还是输出流?

以内存为参照,如果数据向内存流动则是输入流,反之是输出流。

三.java流分类

1.字节流:可以用于读写二进制文件以及任何类型文件。 byte

2.字符流:可以用于读写文本文件。不能操作二进制文件。

字节流 字符流
输入 InputStream Reader
输出 OutputStream Writer

四.常用io流 之文件对象

案例:文件数据源File类介绍

public static void fileDemo(){
    //创建一个文件对象
    File f = new File("src/test.txt");
    //得到文件的路径
    System.out.println("文件路径:"+f.getAbsolutePath());
    //得到文件的大小
    System.out.println("文件字节的大小:"+f.length() );
    //判断文件是否可读或可写
    System.out.println("可读:"+f.canRead());
    //创建文件和文件夹
    File f2 = new File("d:/demo.txt");
    if (!f2.exists()){
        //可以创建
        try {
            f2.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }else {
        System.out.println("有文件,不能创建");
    }
}


结果:

文件路径:D:\study\jiebademo2\src\test.txt
文件字节的大小:2102
可读:true
创建成功

在D盘下创建了demo.txt文件。

若想创建创建文件夹,代码如下:

public static void demo2(){
    File f = new File("d:/ff");
    //判断文件夹是否存在
    if (f.isDirectory()){
        System.out.println("该文件夹已存在");
    }else {
        //创建文件夹
        f.mkdir();
    }
}

列出一个文件夹下的所有文件:

//列出文件夹下的所有文件
public static void demo3(){
    File f = new File("d:/study");
    if(f.isDirectory()){
        File[] files = f.listFiles(); //返回文件对象数组
        for(int i=0;i<files.length;i++){
            System.out.println("文件名 "+files[i].getName());
        }
    }
}

结果是:

文件名 apache-tomcat-9.0.14
文件名 campus_live_platform-master.zip
文件名 icutword
文件名 jar包
文件名 jiebademo
文件名 jiebademo2
文件名 jieba分词
文件名 navicat for mysql10.0.11简体中文破解版
文件名 springbootmybatisplus
文件名 springboot实战资料
文件名 test.txt
文件名 笔记

五.常用io流 之文件字节流

案例1.读取文件(文件字节输入流使用。FileInputStream类),用FileInputStream的对象把文件读入到内存。

public static void demo(){
    File f = new File("d:/demo.txt");
    FileInputStream fis = null;
    System.out.println("文件字节的大小:"+f.length() );
    //因为File没有读写的能力,所以需要使用InputStream
    try {
        fis = new FileInputStream(f);
        //定义一个字节数组,相当于缓存
        byte[] bytes = new byte[1024];
        int n = 0;//得到实际读取到的字节数
        //循环读取
        while ((n=fis.read(bytes))!=-1){
            //把字节转成String
            String s = new String(bytes,0,n);
            System.out.println(s);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //关闭文件流
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

案例2.在内存中写入字符串,并保存到文件中(文件字节输出流,FileOutputStream类)。

public static void demo(){
    //如果有这个文件,则在这个文件写入,如果没有则创建一个文件并写入
    File f = new File("d:/demo.txt");
    //字节输出流
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(f);
        String s = "你好!";
        //定义字节数组
        byte[] bytes = new byte[1024];
        //如何把String转化成一个bytes数组
        fos.write(s.getBytes());

    } catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

六.常用io流 之文件字符流

案例.(文件字符输入输出流 FileReader FileWriter类)读取一个文件,并写入到另一个文件中。

注意:FiileReader和FilerWriter是针对字符操作!而不是字节!

public static void demo(){
    //文件读取字符流对象(输入流)
    FileReader fr = null;
    //写入到文件(输出流)
    FileWriter fw = null;
    try{
        //创建fr对象
        fr = new FileReader("D://demo.txt");
        //创建输出对象
        fw = new FileWriter("D:/test2.txt");
        int n = 0;//记录实际读取到的字符数
        //读取到内存
        char[] c = new char[1024];
        while((n=fr.read(c)) != -1){
            fw.write(c);
        }


    }catch(Exception e){
        e.printStackTrace();
    } finally {
        try {
            fr.close();
            fw.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

七.缓冲字符流

为了提高效率引入了缓冲字符流 BufferReader 和BufferWriter。直接操作String。

public static void demo2(){
    BufferedReader br = null;
    BufferedWriter bw = null;
    FileWriter fw =null;
    FileReader fr = null;
    try{
        fr = new FileReader("D:/demo.txt");
        br = new BufferedReader(fr);
        fw = new FileWriter("D:/test3.txt");
        bw = new BufferedWriter(fw);
        String s="";
        while ((s = br.readLine()) != null){
            //输出到磁盘
           fw.write(s+"\r\n");
        }
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        try {
            fr.close();
            fw.close();
            br.close();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

发布了9 篇原创文章 · 获赞 15 · 访问量 6588

猜你喜欢

转载自blog.csdn.net/qq_34478594/article/details/88055202