IO流对文件的操作

IO流操作
使用递归的方法删除非空目录

image-20220921105344232

package Demo;

import java.io.File;

public class Demo1 {
    public static void main(String[] args) {
        String dst = "e:\\del1";
        File f = new File(dst);
        del(new File("e:\\del1"));
        if(f.exists() && f.isDirectory()) {
            System.out.println(f.delete());
        }
    }
    public static void del(File dir){
        //判断是否为目录,不是目录就执行dir.delete();
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            //递归直到打开到方法的最低层跳出if执行delete
            for(File file : files){
                //判断是否为目录,如果是目录就继续打开,如果不是就跳出if
                if(file.isDirectory()) {
                    del(file);
                }
                file.delete();
            }
        }
        dir.delete();
    }
}

运行程序到目录所在的地址发现del1目录删除成功

建立一个文件
package Demo;

import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        String str = "E:\\Demo\\Demo.txt";
        File file = new File(str);
        file.createNewFile();
        //测试此抽象路径名表示的文件是否为普通文件。
        System.out.println(file.isFile());
        //测试此抽象路径名表示的文件或目录是否存在。
        System.out.println(file.exists());
        //测试此抽象路径名表示的文件是否为目录
        System.out.println(file.isDirectory());
    }
}

程序结果

image-20220921135201323

所在地址中发现所创建的文件即为成功

计算目录中共有多少文件共有多少行
package Demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLOutput;


public class Demo3 {
    static int num = 0;
    static int rows = 0;

    public static void main(String[] args) {
        String dir = System.getProperty("file.separator");
        dir = "D:\\ITBYjava\\javase";
        File s = new File(dir);
        count(s);
        System.out.println("共" + rows + "行");
        System.out.println("num");
    }

    public static void count(File src) {
        if (src.isDirectory()) {
            File[] files = src.listFiles();
            for (File file : files) {
                //递归
                if (file.isDirectory()) count(file);
                if (file.isFile() && file.getName().endsWith(".java")) {
                    ++num;
                    rows += getFileRows(file);
                }
            }
        }
    }

    public static int getFileRows(File src) {
        int rows = 0;
        try (FileInputStream fis = new FileInputStream(src)) {
            //读取所有字节,获取行数,.count计数转换为int类型
            rows = (int) new String(fis.readAllBytes()).lines().count();
        } catch (Exception e) {

        }
        return rows;
    }
}

程序结果

image-20220921162209780

IO建立文件方式
package Demo;

import java.io.*;
import java.sql.SQLOutput;

public class Demo4 {
    public static void main(String[] args) throws IOException {
        //建立空文件
        File f1 = new File("a.txt");
        f1.createNewFile();

        //建立文件并写入内容
        PrintWriter out = new PrintWriter("b.txt");
        out.write("hello - 中文\n");
        out.printf("%tF %<TF%n", System.currentTimeMillis());
        out.flush();

        //字节流写入文件
        FileOutputStream fos = new FileOutputStream("c.txt",true);
        for (int i = 0; i < 10; i++) {
            fos.write("97 - hello 中文写入\r\n".getBytes());
        }
        fos.close();

        //字符流写入文件
        FileWriter fw = new FileWriter("d.txt");
        fw.write("hello 程序设计");
        fw.close();
    }
}

程序结果

image-20220921164557793

读取文本内容
package Demo;

import java.io.*;

public class Demo6 {
    public static void main(String[] args) throws Exception {
        File file = new File("c.txt");
        //字节流读取文件
        FileInputStream in = new FileInputStream(file);
        System.out.println(new String(in.readAllBytes()));
        System.out.println("---------------------------------------");
        //字符流读取文件
        FileReader reader = new FileReader(file);
        BufferedReader bis = new BufferedReader(reader);
        while(bis.ready()){
            System.out.println(bis.readLine());
        }
    }
}

程序结果
image-20220921192016209

File类获取文件的信息,更名,移动,删除文件
package Demo;

import java.io.File;
import java.io.FileWriter;

public class Demo5 {
    public static void main(String[] args) {
        File file = new File("c.txt");
        //文件信息
        System.out.println(file.isFile());
        System.out.println(file.exists());
        //查询文件字节
        System.out.println(file.length());
        //查询文件创建时间
        System.out.printf("%tF %<tT%n",file.lastModified());
        //查询文件名
        System.out.println(file.getName());
        //查询文件相对路径
        System.out.println(file.getPath());
        //查询文件绝对路径
        System.out.println(file.getAbsoluteFile());
        //文件目录
        String t = file.getAbsolutePath();
        System.out.println(t.substring(0,t.lastIndexOf("\\")));
        //文件基本名
        System.out.println(t.substring(t.lastIndexOf("\\")+1,t.lastIndexOf(".")));
        //文件扩展名
        System.out.println(t.substring(t.lastIndexOf(".")));


        //文件名修改(文件名修改不能修改文件后缀)
        //file.renameTo(new File("c1.txt"));
        //文件名修改也可以修改文件路径(剪切复制到一级目录),不能建立目录
        //file.renameTo(new File("e:\\c1.txt"));

        //文件删除
        if(file.isFile()&& file.exists()){
            file.delete();
        }
    }
}

程序结果(获取到文件信息且c.txt文件被删除)
image-20220921174241059

文件copy
package Demo;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Demo7 {
    public static void main(String[] args) {
        
        //注:"只能把文件copy到最低层目录"
        
        String f1 = "e:\\1.jpg";
        try (
                var is = new FileInputStream(f1);
                var os = new FileOutputStream("e:\\picture\\1.jpg");
        ) {
            //法一:将is里的全部读取到os,硬件条件不满足时会卡死,风险较高
            //os.write(is.readAllBytes());

            //法二:将is里的字节一个一个读取到os里,效率较低
            //int b = 0;
            //while ((b = is.read()) != -1) {
            //    os.write(b);
            //}

            //法三:transferTo方法按照8k的内存copy,可以复制系统方法通过修改内存来满足项目需求
            //is.transferTo(os);
            byte[] buffer = new byte[1024*25];
            int read;
            while ((read = is.read(buffer)) >= 0) {
                os.write(buffer, 0, read);
            }
        } catch (Exception e) {

        }
    }
}

运行结果
image-20220921195408827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值