在IO包中,字节流的输入输出流分别用java.io.InputStream和java.io.OutputStream表示,字符流的输入输出流分别用java.io.Reader和java.io.Writer表示。

InputStream和OutputStream是字节流的顶级父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。


public static void test1() throws Exception{
//        System.out.println(System.getProperty("user.dir"));
        FileInputStream in=new FileInputStream("src/src.txt");
        int b=0;
        while (true){
            b=in.read();
            if(b==-1){
                break;
            }
            System.out.println(b);
        }
        in.close();
    }public static void test2() throws Exception{
        FileInputStream in=new FileInputStream("src/src.txt");
        int len;
        byte[] bytes=new byte[1024];
        while (true){
            len=in.read(bytes);
            System.out.println(len);
            if(len==-1){
                break;
            }
            for(int i=0;i<len;i++){
                System.out.println(bytes[i]);
            }
        }
        in.close();
    }public static void test1() throws Exception{
        FileOutputStream out=new FileOutputStream("src/example.txt");
        String str="java is good";
        byte[] bytes=str.getBytes();
        for(int i=0;i< bytes.length;i++){
            out.write(bytes[i]);
        }
        out.close();
    }public static void test2() throws Exception{
        FileOutputStream out=new FileOutputStream("src/example.txt");
        String str="java is very good";
        byte[] bytes=str.getBytes();
        out.write(bytes);
        out.close();
    }字符流
Reader和Writer作为字符流的顶级父类,也有许多子类,接下来通过继承关系图来列出Reader和Writer的一些常用子类。

public static void main(String[] args) throws Exception {
        FileReader reader=new FileReader("src/src.txt");
        int ch;
        while ((ch=reader.read())!=-1){
            System.out.println((char) ch);
        }
        reader.close();
    }public static void main(String[] args) throws Exception{
        FileWriter writer=new FileWriter("src/writer.txt");
        String str="大家好 各位同学";
        writer.write(str);
        writer.write("\r\n");//转义字符
        writer.close();
    }public static void main(String[] args) throws Exception {
        System.out.println(System.getProperty("user.dir"));
        FileReader reader=new FileReader("src/src.txt");
        BufferedReader br=new BufferedReader(reader);
        FileWriter writer=new FileWriter("src/des.txt");
        BufferedWriter bw=new BufferedWriter(writer);
        String str=null;
        while ((str=br.readLine())!=null){
            bw.write(str);
            bw.newLine();//额外的换行操作
        }
        br.close();
        bw.close();
    }public static void main(String[] args) throws Exception{
        FileInputStream in=new FileInputStream("src/src.txt");
        InputStreamReader isr=new InputStreamReader(in);
        BufferedReader br=new BufferedReader(isr);
        //
        OutputStream out=new FileOutputStream("src/des.txt");
        OutputStreamWriter osw=new OutputStreamWriter(out);
        BufferedWriter bw=new BufferedWriter(osw);
        //
        String line=null;
        while ((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
        }
        br.close();
        bw.close();
    }File类
File类中提供了一系列方法,用于操作其内部封装的路径指向的文件或者目录,例如判断文件/目录是否存在、创建、删除文件/目录等。

public static void main(String[] args) {
        File file=new File("src/example.txt");//相对路径
        System.out.println("文件名称:"+file.getName());
        System.out.println("文件的相对路径:"+file.getPath());
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的父路径:"+file.getParent());
        System.out.println(file.canRead()?"文件可读":"文件不可读");
        System.out.println(file.canWrite()?"文件可写":"文件不可写");
        System.out.println(file.isFile()?"是一个文件":"不是一个文件");
        System.out.println(file.isDirectory()?"是绝对路径":"不是绝对路径");
        System.out.println("最后的修改时间:"+file.lastModified());
        System.out.println("文件大小为:"+file.length()+"bytes");
        System.out.println("是否成功删除文件:"+file.delete());
    }public static void main(String[] args) {
//        test1();
        test2();
    }
    //遍历目录下的文件
    public static void test1(){
        File file=new File("src/test");
        if(file.isDirectory()){
            String[] names=file.list();
            for (String name:names){
                System.out.println(name);
            }
        }
    }
    //遍历目录及其子目录下的文件
    public static void test2(){
        File file=new File("src/test");
        filterDir(file);
    }
    private static void filterDir(File dir){
        File[] files=dir.listFiles();
        for(File file:files){
            if(file.isDirectory()){//方法的递归
                filterDir(file);
            }
            System.out.println(file.getAbsolutePath());
            file.delete();
        }
    }public static void main(String[] args) {
        FilenameFilter filter=new FilenameFilter() {
            
            public boolean accept(File dir, String name) {
                File currFile=new File(dir,name);
                if(currFile.isFile() && name.endsWith(".txt")){
                    return true;
                }else {
                    return false;
                }
            }
        };
        File file=new File("src/test");
        if(file.exists()){
            String[] lists=file.list(filter);
            for(String name:lists){
                System.out.println(name);
            }
        }
    }public static void main(String[] args) {
//        test1();
        test2();
    }
    //删除普通文件
    public static void test1(){
        File file=new File("src/test/test1.txt");
        if(file.exists()){
            System.out.println(file.delete());
        }
    }
    //删除目录及其子目录 文件
    public static void test2(){
        File file=new File("src/test");
        deleteDir(file);
    }
    private static void deleteDir(File dir){
        if(dir.exists()){
            File[] files=dir.listFiles();
            for(File file:files){
                if(file.isDirectory()){
                    deleteDir(file);
                }else {
                    file.delete();
                }
            }
            dir.delete();
        }
    }









