字符流和转换流

字符流

Reader

字符输入流

public int read(char[]c)//从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。

import javax.swing.text.StringContent;
public static void main(String[] args) throws Exception{
        //1创建FileReader 文件字符输入流
        FileReader fr = new FileReader("d://hello.txt");
        //2读取
        //2.1单个字符读取
//        int data = 0;
//        while ((data = fr.read())!=-1){
//            System.out.print((char)data);
//        }
        char[] buf = new char[1024];
        int count =0;
        while ((count = fr.read(buf))!=-1){
            System.out.println(new String(buf,0,count));
        }
        //关闭
        fr.close();
    }

Wirter

字符输出流

public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流。

import java.io.FileWriter;
public static void main(String[] args)throws Exception {
        FileWriter fw = new FileWriter("d://write.txt");
​
        for(int i=0;i<10;i++){
            fw.write("java666");
            fw.flush();
        }
        fw.close();
    }

PrintWriter

封装了print()/println()方法,支持写入后换行。

支持数据原样打印

import java.io.PrintWriter;
​
public static void main(String[] args) throws Exception {
    //1创建打印流
    PrintWriter pw = new PrintWriter("d:\\print.txt");
    //2打印
    pw.println(97);
    pw.println(true);
    pw.println(3.14);
    pw.println('a');
    //3关闭
    pw.close();
    System.out.println("执行完毕");
}

文件的复制

使用FileReader和Filewriter复制文本文件,不能复制图片或二进制文件

import java.io.FileReader;
import java.io.FileWriter;
​
public static void main(String[] args) throws Exception{
        //1创建FileReader FileWriter
        FileReader fr=new FileReader("d:\\write.txt");
        FileWriter fw=new FileWriter("d:\\write2.txt");
        //2读写
        int data=0;
        while((data=fr.read())!=-1) {
            fw.write(data);
            fw.flush();
        }
        //3关闭
        fr.close();
        fw.close();
        System.out.println("复制完毕");
    }

字符缓冲流

缓冲流:BufferedReader/BufferedWriter

  • 高效读写

  • 支持输入换行符

  • 可一次写一行、读一行

输出文件

import java.io.BufferedReader;
import java.io.FileReader;
​
public static void main(String[] args) throws Exception{
        //1创建缓冲流
        FileReader fr=new FileReader("d:\\write.txt");
        BufferedReader br=new BufferedReader(fr);
        //2读取
        //2.1第一种方式
        char[] buf=new char[1024];
        int count=0;
        while((count=br.read(buf))!=-1) {
            System.out.print(new String(buf,0,count));
        }
        //2.2第二种方式,一行一行的读取
        String line=null;
        while((line=br.readLine())!=null) {
            System.out.println(line);
        }
        //3关闭
        br.close();
    }

写入文件

import java.io.BufferedWriter;
import java.io.FileWriter;
public static void main(String[] args) throws Exception{
        //1创建BufferedWriter对象
        FileWriter fw=new FileWriter("d:\\buffer.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        //2写入
        for(int i=0;i<10;i++) {
            bw.write("好好学习,天天向上");
            bw.newLine();//写入一个换行符windows \r\n  linux \n
            bw.flush();
        }
        //3关闭
        bw.close();
        
        System.out.println("执行完毕");
    }

转换流

桥转换流:InputStreamReader/0utputStreamWriter

内存中的字符和硬盘中的字节之间的转换

InputStreamReader

字节流转成字符流

可将字节流转换为字符流。 可设置字符的编码方式。

import java.io.FileInputStream;
import java.io.InputStreamReader;
​
public static void main(String[] args) throws Exception {
    //1创建InputStreamReader对象
    FileInputStream fis = new FileInputStream("d:\\write.txt");
    InputStreamReader isr = new InputStreamReader(fis, "utf-8");
    //2读取文件
    int data = 0;
    while ((data = isr.read()) != -1) {
        System.out.print((char) data);
    }
    //3关闭
    isr.close();
}

0utputStreamWriter

字符流转成字节流

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
​
public static void main(String[] args) throws Exception{
    //1创建OutputStreamWriter
    FileOutputStream fos=new FileOutputStream("d:\\info.txt");
    OutputStreamWriter osw=new OutputStreamWriter(fos, "utf-8");
    //2写入
    for(int i=0;i<10;i++) {
        osw.write("我爱北京,我爱故乡\r\n");
        osw.flush();
    }
    //3关闭
    osw.close();
    System.out.println("执行成功");
}

File类

概念:代表物理盘符中的一个文件或者文件夹。

文件操作和文件夹操作

public static void main(String[] args) throws Exception {
        //fileOperator();
        fileOpe();
        separator();
        directoryOpe();
    }
​
    //(1)分隔符
    public static void separator() {
        System.out.println("路径分隔符" + File.pathSeparator);
        System.out.println("名称分隔符" + File.separator);
    }
​
    //(2)文件操作
    public static void fileOpe() throws Exception {
        //1创建文件
        File file = new File("d:\\file.txt");
        //System.out.println(file.toString());
        boolean b = file.createNewFile();
        //2删除文件
        //2.1直接删除
        //System.out.println("删除结果:"+file.delete());
        //2.2使用jvm退出时删除
//        file.deleteOnExit();
//        Thread.sleep(5000);//休眠五秒(五秒后删除)
        System.out.println("------------------------------------------------------------------------------");
        //3获取文件信息
        System.out.println("获取文件的绝对路径:" + file.getAbsolutePath());
        System.out.println("获取路径:" + file.getPath());
        System.out.println("获取文件名称:" + file.getName());
        System.out.println("获取父目录:" + file.getParent());
        System.out.println("获取文件长度:" + file.length());
        System.out.println("文件创建时间:" + new Date(file.lastModified()).toLocaleString());
​
        //4判断
        System.out.println("是否可写:" + file.canWrite());
        System.out.println("是否时文件:" + file.isFile());
        System.out.println("zheli");
        System.out.println("是否隐藏:" + file.isHidden());
​
    }
    //(3)文件夹操作
    public static void directoryOpe() throws Exception {
        System.out.println("---------------------*************-----------------------");
        //1创建文件夹
        File dir = new File("d:\\aaa\\bbb\\ccc");
        System.out.println(dir.toString());
        if (!dir.exists()) {
            dir.mkdir();//只能创建单级目录
            System.out.println("创建结果:" + dir.mkdirs());//创建多级目录
        }
        //2删除文件夹
        //2.1直接删除(注意删除空目录)
        //System.out.println("删除结果:"+dir.delete());
        //2.2使用jvm删除
//        dir.deleteOnExit();
//        Thread.sleep(5000);
        //3获取文件夹信息
        System.out.println("获取绝对路径:" + dir.getAbsolutePath());
        System.out.println("获取路径:" + dir.getPath());
        System.out.println("获取文件夹名称:" + dir.getName());
        System.out.println("获取父目录:" + dir.getParent());
        System.out.println("获取创建时间:" + new Date(dir.lastModified()).toLocaleString());
​
        //4判断
        System.out.println("是否时文件夹:" + dir.isDirectory());
        System.out.println("是否时隐藏:" + dir.isHidden());
​
        //5遍历文件夹
        File dir2 = new File("d:\\123123");
        String[] files = dir2.list();
        System.out.println("-------------------");
        for (String string : files) {
            System.out.println(string);
        }
    }

FileFilter接口

public interface FileFilterboolean accept (File pathname)

当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。

System.out.println("----------FileFilter接口的使用----------");
File[] files2 = dir2.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        if (pathname.getName().endsWith(".jpg")) {
            return true;
        }
        return false;
    }
});
for (File file : files2) {
    System.out.println(file.getName());
}

递归遍历和递归删除

import java.io.File;
​
public static void main(String[] args) {
        //Listdir(new File("d://123123"));
        deleteDir(new File("d://123123"));
​
    }
    //递归遍历文件夹
    public  static void Listdir(File dir){
        File[] files  =dir.listFiles();
        System.out.println(dir.getAbsolutePath());
        if(files!=null&& files.length>0){
            for (File file : files) {
                if(file.isDirectory()){//于判断当前 File 对象是否表示一个目录(文件夹)
                    Listdir(file);//递归Listdir 的核心功能是 递归遍历目录
                }else {
                    System.out.println(file.getAbsolutePath());
                }
            }
​
        }
​
    }
    //递归删除文件夹
    public static void deleteDir(File dir){
        File[] files = dir.listFiles();
        if(files!=null&& files.length>0){
            for (File file : files) {
                if(file.isDirectory()){//于判断当前 File 对象是否表示一个目录(文件夹)
                    deleteDir((file));//递归Listdir 的核心功能是 递归遍历目录
            }else {
                    System.out.println(file.getAbsolutePath()+"删除"+file.delete());
                }
            }
        }
        System.out.println(dir.getAbsolutePath()+"删除"+dir.delete());
​
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值