java中常见的IO流

IO流

IO流:Input 和 Output

IO流分类

按读取方式分类:
字节流:InputStram,OutputStream (”以 Stream 结尾)
字符流:Reader/Writer (“ Reader/Writer ”结尾)

JAVA常用的流

FileInputStream
public class FileInputStreamTest {
    public static void main(String[] args) throws FileNotFoundException {

        //FileInputStream   Stream都是字节流  FileInputStream是可以读取任何文件的
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("src/test.txt");

            // 开始读,采用byte数组,一次读取多个字节。最多读取“数组.length”个字节。
            byte[] bytes=new byte[1024];// 准备一个1024个长度的byte数组,一次最多读取1024个字节。

            int readCount = 0;
            // 这个方法的返回值是:读取到的字节数量。(不是字节本身);1个字节都没有读取到返回-1(文件读到末尾)
            while((readCount = fis.read(bytes)) != -1) {
                // 不应该全部都转换,应该是读取了多少个字节,转换多少个。
                System.out.print(new String(bytes, 0, readCount));
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }  catch (Exception e) {
            e.printStackTrace();
        } finally {

            // 在finally语句块当中确保流一定关闭。
            if (fis != null) {// 避免空指针异常!
                // 关闭流的前提是:流不是空。流是null的时候没必要关闭。
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
}
FileOutputStream
public class FileOutputStreamTest {
    public static void main(String[] args) {


        FileOutputStream fos = null;
        try {
            // myfile文件不存在的时候会自动新建!
            // 这种方式谨慎使用,这种方式会先将原文件清空,然后重新写入。
            //fos = new FileOutputStream("myfile");

            // 以追加的方式在文件末尾写入。不会清空原文件内容。
            fos = new FileOutputStream("src/test01.txt", true);
            // 开始写。
            byte[] bytes = {97, 98, 99, 100};
            // 将byte数组全部写出!
            fos.write(bytes); // abcd
            // 将byte数组的一部分写出!
            fos.write(bytes, 0, 2); // 再写出ab

            // 字符串
            String s = "我是一个中国人,我骄傲!!!";
            // 将字符串转换成byte数组。
            byte[] bs = s.getBytes();
            // 写
            fos.write(bs);

            // 写完之后,最后一定要刷新
            fos.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
         catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}
FileReader
public class FileReaderTest {
    public static void main(String[] args) throws FileNotFoundException {

        //FileReader 文件字符输入流,只能读取普通文本。读取文本内容时,比较方便,快捷
        FileReader reader = null;
        try {
            // 创建文件字符输入流
            reader = new FileReader("src/test01.txt");

            // 开始读
            char[] chars = new char[4]; // 一次读取4个字符
            int readCount = 0;
            while((readCount = reader.read(chars)) != -1) {
                System.out.print(new String(chars,0,readCount));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}


FileWriter
public class FileWriterTest {
    public static void main(String[] args) {

        //FileWriter文件字符输出流。写。只能输出普通文本。
        FileWriter out = null;
        try {
            // 创建文件字符输出流对象
            //out = new FileWriter("file");
            out = new FileWriter("src/test01.txt", true);

            // 开始写。
            char[] chars = {'你','是','中','国','人','吗'};
            out.write(chars);
            out.write(chars, 2, 3);  // 中国人

            out.write("我是一名java软件工程师!");
            // 写出一个换行符。
            out.write("\n");
            out.write("hello world!");

            // 刷新
            out.flush();

        } catch (  Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}


BufferedReader
InputStreamReader
package com.example.IO;

import java.io.*;

public class BufferReaderTest {

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

        FileReader reader = new FileReader("src/test.txt");
        // 当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流。
        // 外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流。
        // 像当前这个程序来说:FileReader就是一个节点流。BufferedReader就是包装流/处理流。
        BufferedReader br = new BufferedReader(reader);
		
		//BufferedReader br = new BufferedReader(  new FileReader("src/test.txt") );
        // br.readLine()方法读取一个文本行,但不带换行符。
        String s = null;
        while((s = br.readLine()) != null){
            System.out.println(s);
        }

        // 关闭流
        // 对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭。(可以看源代码。)
        br.close();




       /*
        // 字节流
        FileInputStream in = new FileInputStream("src/test.txt");

        // 通过转换流转换(InputStreamReader将字节流转换成字符流。)
        // in是节点流。reader01是包装流。
        InputStreamReader reader01 = new InputStreamReader(in);

        // 这个构造方法只能传一个字符流。不能传字节流。
        // reader是节点流。br是包装流。
        BufferedReader br01 = new BufferedReader(reader01);

        */

        // 合并
        BufferedReader br01 = new BufferedReader(new InputStreamReader(new FileInputStream("src/test.txt")));

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

        // 关闭最外层
        br.close();






    }
}

BufferedWriter
OutputStreamWriter
package com.example.IO;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;

public class BufferWriterTest {
    public static void main(String[] args) throws Exception{

        //BufferedWriter
        BufferedWriter bw=new BufferedWriter( new FileWriter("src/test01.txt"));

        bw.write("111");
        bw.write("\n");
        bw.write("00000000");

        bw.flush();
        bw.close();


        //OutputStreamWriter  字节流转换成字符流
        // 带有缓冲区的字符输出流
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src/test01.txt", true)));
        // 开始写。
        out.write("hello world!");
        out.write("\n");
        out.write("hello kitty!");
        // 刷新
        out.flush();
        // 关闭最外层
        out.close();



    }

}

BufferedInputStream
BufferedOutputStream
package com.example.IO;

import java.io.*;

public class BufferedInOutputStreamTest {
    public static void main(String[] args) {

        String srcFilePath = "d:\\111\\boluo.jpg";
        String destFilePath = "d:\\111\\ld.jpg";

        //创建BufferedInputStream和BufferedOutputStream对象
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;

        try {
            bis = new BufferedInputStream(new FileInputStream(srcFilePath));
            bos = new BufferedOutputStream(new FileOutputStream(destFilePath));

            //循环的读取文件,并写入到
            byte[] buff = new byte[1024];

            int readLen = 0;
            //当返回 -1时,就表示文件读取完毕
            while((readLen = bis.read(buff)) != -1){
                bos.write(buff,0,readLen);
            }
            System.out.println("文件拷贝完成~~~");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭外层的处理流即可,底层去关闭节点流
            try {
                if (bis != null){
                    bis.close();
                }
                if(bos != null){
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}





File
class FileTest{
    public static void main(String[] args) {

        //创建文件
        File f1 = new File("D:/IO/File1.txt");
        if (!f1.exists()){
            try {
                f1.createNewFile();//创建文件

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        //创建文件夹
        File f2 = new File("D:/IO/File2");
        if (!f2.exists()){
            f2.mkdir();//创建文件夹
        }

        //创建多重文件夹
        File f3 = new File("D:/IO/File3/a/b/c/d/e/f/g/h/i");
        if (!f3.exists()){
            f3.mkdirs();//创建多重文件夹
        }

        File f5 = new File("D:\\IO\\FileDelete");
        f5.delete();

        File f4 = new File("D:\\Data\\新建文件夹");
        String s1 = f4.getName();//新建文件夹
        System.out.println(s1);

        String s2 = f4.getParent();//D:\Data
        System.out.println(s2);

        String s3 = f4.getPath();//D:\Data\新建文件夹
        System.out.println(s3);

        String s4 = f4.getAbsolutePath();//D:\Data\新建文件夹
        System.out.println(s4);

        File asf = f4.getAbsoluteFile();
        System.out.println(asf.getAbsolutePath());//D:\Data\新建文件夹

        File pf = f4.getParentFile();
        System.out.println(pf.getAbsolutePath());//D:\Data

        System.out.println(f4.isDirectory());//true

        System.out.println(f4.isFile());//false

        System.out.println(f4.isHidden());//false

        System.out.println(f4.isAbsolute());//true

        File f6 = new File("D:\\IO\\Day24.java");
        System.out.println(f6.length());//5743字节




    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值