File类与IO流-回顾

File对象常用方法


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


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1、创建一个文件对象的实例
        File file=new File("E:\\下载\\a.txt");

        //创建删除功能的方法
        //文件不存在时,创建一个创建File指定的新的空文件
        System.out.println(file.createNewFile());
        //创建File指定的目录(如E:\\下载\\a目录)
        System.out.println(file.mkdir());
        //创建File指定的带父级的嵌套目录(如E:\\下载\\a目录\\a目录下的文件)
        System.out.println(file.mkdirs());

        //删除创建File指定的单个文件
        System.out.println(file.delete());




//        获取属性相关方法
        //返回此File的绝对路径名字字符串
        System.out.println(file.getAbsoluteFile());//E:\下载\a.txt
        //获取文件的所在目录
        System.out.println(file.getPath());//E:\下载
        //File的文件名称
        System.out.println(file.getName());//a.txt
        //文件长度
        System.out.println(file.length());//0

        //判断类的方法
        System.out.println(file.exists());//预判文件是否存在
        System.out.println(file.isDirectory());//判断是否是目录
        System.out.println(file.isFile());//判断是否是文件



    }
}

创建文件注意事项
1、所在目录不存在时


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


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1、创建一个文件对象的实例
        File file=new File("E:\\下载\\A1\\a.txt");

        //获取文件的所在的目录
        System.out.println(file.getParent());
        File f = new File("E:\\下载\\A1");
        //先创建a.txt所在的文件夹,否不存在文件夹直接创建嵌套文件容易报错
        f.mkdir();
        file.createNewFile();



    }
}

2、嵌套目录不存在时

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


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1、创建一个文件对象的实例
        File file=new File("E:\\下载\\A1\\A2\\a.txt");

        File parentFile = file.getParentFile();
        //判断父路径是否存在
        if(!parentFile.exists()){
            //父路径不存在,创建父路径
            parentFile.mkdirs();
        }
        //创建目标文件
        file.createNewFile();


    }
}

遍历和过滤文件


import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1、创建一个文件对象的实例
        File file=new File("E:\\下载\\A1");

        //获取file目录中的所有子文件或目录
        String[] fileNames = file.list();
        for (String name : fileNames) {
            //遍历出E:\下载\A1文件下的所有文件名字
            System.out.println(name);
        }

        System.out.println("=====================");

        //获取目录中的所有子文件或目录
        File[] files = file.listFiles();
        for (File f : files) {
            //遍历出E:\下载\A1文件下的所有文件的绝对路径
            System.out.println(f.getAbsolutePath());
        }
        System.out.println("=====================");

        File[] arr = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                /**
                 * dir返回上级目录,name返回该文件夹下的文件名
                 * dir==>E:\下载\A1,name==>a.txt
                 * dir==>E:\下载\A1,name==>A2
                 */
                System.out.println("dir==>" + dir + "," + "name==>" + name);
                if("A2".equals(name)){//过滤掉A2文件夹
                    return false;
                }
                return true;
            }
        });
        
        //遍历过滤后的arr
        for (File f : arr) {
            System.out.println("@====>"+f.getName());
        }


    }
}

IO

使用java.io包下的内容,进行输入、输出操作

  • in 输入(读) 硬盘->内存
  • out 输出(写) 内存->硬盘

IO分类

根据数据的流向分为:输入流和输出流

  • 输入流:把数据从其他设备上读取到内存中的流
  • 输出流:把数据从内存中写出到其他设备上的流

根据数据的类型分为:字节流和字符流

  • 字节流:以字节为单位,读取数据的流
  • 字符流:以字符为单位,读写数据的流

体系

字节流

  • 字节输入流 InputStream
    FileInputStream: 文件字节输入流
    使用案例:

import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1、创建一个字节输出流对象,默认不写第二个参数是false,覆盖写,加上true是追加写
        //不写路径是默认该项目的根路径
        OutputStream out=new FileOutputStream("a.txt");//覆盖写
//        OutputStream out=new FileOutputStream("E:\\下载\\A1\\a.txt",true);//追加写
        
        //2、向流中写入数据,覆盖写
//        out.write("大家好才是真的好\r\n".getBytes());//将字符串转为字节,使用\r\n换行回车
//        out.write("大家好才是真的好\r\n".getBytes());//将字符串转为字节
//        out.write(97);//数字会转为ASCII码
//        out.write(65);
        out.write("abcd".getBytes(),0,3);//从下标为0的为位置读取3个
        //关闭流
        out.close();


    }
}

BufferedInputStream:字节缓冲输入流
使用案例:


import java.io.*;

/**
 * 字节缓冲输入流
 * 读取文件内容到内存中
 *
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {

        InputStream in =new BufferedInputStream(new FileInputStream("a.txt"));
        byte[] bytes = new byte[1024];
        int len=0;
        while ((len=in.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));

        }
        in.close();
    }
}
  • 字节输入流 OutoutStream
    FileOutoutStream 文件字节输出流
    使用案例:

import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {
        //创建输入流对象
        InputStream in= new FileInputStream("a.txt");

//        System.out.println(in.read());//一次读取一个字节 -1表示读完了
//        System.out.println(in.read());
//        System.out.println(in.read());//-1读完了

        byte[] bytes=new byte[1024];
//        in.read(bytes);//将内容读取到传入的字节数组中
//        System.out.println(new String(bytes));
        int len=0;
        while ((len=in.read(bytes))!=-1){
            System.out.println("长度==="+len);
            System.out.println("内容==="+new String(bytes,0,len));
        }


        //关闭流
        in.close();



    }
}

BufferedOutputStream:字节缓冲输出流
使用案例:


import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {

//        OutputStream out = new BufferedOutputStream(new FileOutputStream("a.txt"));
        OutputStream out = new BufferedOutputStream(new FileOutputStream("a.txt"),1);//当达到指定大小的时候自动刷新
        out.write("Hello,world\r\n".getBytes());//并没有直接写入到文件,写入到了内存中的一个缓冲区
        out.write("Hello,world\r\n".getBytes());//并没有直接写入到文件,写入到了内存中的一个缓冲区

        out.write("Hello,world\r\n".getBytes());//并没有直接写入到文件,写入到了内存中的一个缓冲区

        out.close();//调用close()方法的时候,会将缓冲区中的内容刷新到硬盘的目标文件,然后关闭流


    }
}

使用字节输入输出流实现复制文件


import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {
        long t1 = System.currentTimeMillis();//开启时间戳

        //1.创建一个读取文件的字节输入流
        InputStream in =new FileInputStream("E:\\下载\\A1\\a.txt");

        //2.创建一个写入硬盘数据的字节输出流
        OutputStream out=new FileOutputStream("E:\\下载\\A1\\A2\\a.txt");

        byte[] bytes=new byte[1024];
        int len=0;
        while ((len=in.read(bytes))!=-1){
//            System.out.println(len);
            out.write(bytes,0,len);
        }

        //关闭输出流
        out.close();
        //关闭输入流
        in.close();

        long t2 = System.currentTimeMillis();//结束时间戳
        System.out.println("文件复制成功,用时:"+(t2-t1)/1000+"秒");


    }
}

使用字节缓冲流符复制文件


import java.io.*;

/**
 *
 * 使用字节缓冲流复制文件
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {
        long t1 = System.currentTimeMillis();
        //1.读取文件内容到内存
        InputStream in = new BufferedInputStream(new FileInputStream("a.txt"));
        //2.将读取的内容写入硬盘
        OutputStream out = new BufferedOutputStream(new FileOutputStream("E:\\下载\\A1\\A2\\abc.txt"));
        byte[] bytes=new byte[1024];
        int len=0;
        while ((len=in.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
            out.write(bytes,0,len);
        }
        out.close();
        in.close();
        long t2 = System.currentTimeMillis();
        System.out.println("文件复制成功,用时:"+(t2-t1)/1000+"秒");
    }

}

字符流

  • 字符输入流 Reader
    FileReader 文件字符输入流
    使用案例:

import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {
    //1.创建一个字符输入流  一个中文汉字、字母、数字都是字符
        //读文件不存在会报异常,写不会
        Reader fr = new FileReader("a.txt");
//        System.out.println(fr.read());//20013  一次读一个字符,输出字符对应的unicode编码
//        System.out.println(fr.read());//65533  一次读一个字符,输出字符对应的unicode编码
//        System.out.println(fr.read());//19978  一次读一个字符,输出字符对应的unicode编码
//        System.out.println(fr.read());//28023  一次读一个字符,输出字符对应的unicode编码
//        System.out.println(fr.read());//-1  读取结束

//        char[] chars=new char[1024];
//        System.out.println(fr.read(chars,0,1024));
//        System.out.println(new String(chars,0,1024));
        char[] chars=new char[10];
        int len=0;//每次循环读取到的字符长度存储到该变量上
        while ((len=fr.read(chars))!=-1){

            System.out.print(new String(chars,0,len));
        }
        fr.close();




    }
}

BufferedReader:字符缓冲输入流
使用案例:


import java.io.*;

/**
 *
 * 使用字符缓冲输入流
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));

        String line="";
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }
        br.close();
    }



}
  • 字符输出流 Writer
    FileWriter 文件字符输出流

import java.io.*;


public class IOdemo {
   public static void main(String[] args) throws IOException {
   //1.创建一个字符输出流  一个中文汉字、字母、数字都是字符
       Writer fw=new FileWriter("b.txt");//覆盖写
//        Writer fw=new FileWriter("b.txt",true);//追加写
       //2.通过字符流想b.txt中写入内容
//        fw.write("大家好才是真的好!");
//        fw.write("大家好才是真的好",0,3);//从下标0开始,读3个

//        fw.write("大家好才是真的好".toCharArray(),1,3); //字符串转成字符数组,从下标0开始,读3个
//        fw.write("大家好才是真的好".toCharArray()); //全部
       fw.write(97);//a
       //3.关闭流
       fw.close();

   }
}

BufferedWriter:字符缓冲输出流
使用案例:


import java.io.*;

/**
 *
 * 使用字符缓冲输出流
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("d.txt"));
        bw.write("大家好才是真的好\r\n");
        bw.write("大家好才是真的好");
        bw.newLine();//换行
        bw.write("大家好才是真的好");
        bw.write("大家好才是真的好");
        bw.close();
    }



}

使用字符输入输出流复制文件


import java.io.*;


public class IOdemo {
    public static void main(String[] args) throws IOException {

        //1.创建字符文件输入流
        Reader fr=new FileReader("E:\\下载\\A1\\a.txt");

        //2.创建字符文件输出流
        Writer fw = new FileWriter("E:\\下载\\A1\\A2\\a.txt");
        char[] chars=new char[10];
        int len=0;//每次循环读取到的字符长度存储到该变量上
        while ((len=fr.read(chars))!=-1){

            fw.write(chars,0,len);
        }
        fw.close();
        fr.close();




    }
}

字节字符转换流

InputStreamReader 输入 硬盘(字节流)–>内存(字符流)
使用案例:


import java.io.*;
import java.nio.charset.Charset;

/**
 *
 * 将输入到内存的字节输入流转换成字符输入流  字节(看不懂)-->字符(看得懂)
 *
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {
     /**
      *
      * 第一种方式
        //需要传入一个字节输入流
        //InputStreamReader isr = new InputStreamReader(new FileInputStream("a_GBK.txt"));
        //以指定的字符编码读取文件内容,和读取的文件格式编码一致
        InputStreamReader isr = new InputStreamReader(new FileInputStream("a_GBK.txt"),"GBK");
        char[] chars=new char[1024];
        int len=0;//存储读取到的字符个数
        while ((len=isr.read(chars))!=-1){
            System.out.println(new String(chars,0,len));
        }
        isr.close();
      */


        /**
         * 第二种方式
         *
         */
        //以字节流的方式读取a.GBK
        InputStream in = new FileInputStream("a_GBK.txt");
        byte[] bytes=new byte[1024];
        int len=0;//存储读取到的字节个数
        while ((len=in.read(bytes))!=-1){
//            System.out.println(new String(bytes,0,len,"GBK"));//不写默认utf-8
            System.out.println(new String(bytes,0,len, Charset.forName("GBK")));//不写默认utf-8
        }
        in.close();



    }



}

OutputStreamWriter 输出 内存(字节流)–>硬盘(字符流)
使用案例:


import java.io.*;

/**
 *
 * 将输入到内存的字节输入流转换成字符输入流  字节(看不懂)-->字符(看得懂)
 *
 */
public class IOdemo {
    public static void main(String[] args) throws IOException {
        //将内存中的字符流数据以字节流的形式写入到文件  字符-->字节
        //以指定格式输出
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c_GBK.txt"),"GBK");
        osw.write("大家好才是真的好");
        osw.close();

    }



}

序列化

1.序列化

  • 将java中的对象内容转化成字节数据的过程 java对象(内存)–>字节 字节输出流

2.反序列化

  • 将对象的字节数据转换成java对象的过程 java对象(硬盘)–>字节 字节输入流

3.持久化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值