Java 文件流总结

1、Java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer;字节:InputStream和OutPutStream,如下图:


Java 文件流总结.png

2、 BufferedInputStream是带缓冲区的输入流,默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能;BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入效率。BufferedInputStream与BufferedOutputStream分别是FilterInputStream类和FilterOutputStream类的子类,实现了装饰设计模式。

3、流的程序一般分以下四步:
(1)创建文件对象

File file = new File("xxx.txt");

(2)用流装载文件,如果用字符流的话,则是:

FileReader fileReader = new FileReader(file);

(3)如果用缓冲区,则用缓冲区装载流,用缓冲区是为了提高读写性能

BufferedReader bufferedReader = new BufferedReader(fileReader);

(4)开始读写操作

String str = null;
        while ((str = bufferedReader.readLine()) != null) {
           stringBuffer.append(str);
        }

如果遇到字节流要转换成字符流,则在缓冲区前加一步

InputStreamReader inputStreamReader = new InputStreamReader(inputStream)

或者需要编码转换的,则在缓冲区前加一步

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

4、字节流文件操作(读写)的代码Demo如下:

public static void readFileByByte(String filePath) {

        File file = new File(filePath);

        InputStream inputStream = null; 
        OutputStream outputStream = null;  

        try {

            inputStream = new FileInputStream(file); 
            outputStream = new FileOutputStream("d:/work/readFileByByte.txt");

            int temp;
            while ((temp = inputStream.read()) != -1) {
                outputStream.write(temp);
            }
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            if (inputStream != null && outputStream != null) {
                try {
                    inputStream.close();
                    outputStream.close();
                } catch (IOException e) {
                    e.getStackTrace();
                }
            }
        }
    }

5、字符流文件操作(读写)的代码Demo如下:

public static void readFileByCharacter(String filePath) {

        File file = new File(filePath);

        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader(file);
            writer = new FileWriter("d:/work/readFileByCharacter.txt");

            int temp;
            while ((temp = reader.read()) != -1) {
                writer.write((char)temp);
            }
        } catch (IOException e) {
            e.getStackTrace();
        } finally {
            if (reader != null && writer != null) {
                try {
                    reader.close();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

6、还有一种方法,按行(读写)。Demo如下

public static void readFileByLine(String filePath) {

        File file = new File(filePath);

        BufferedReader bufReader = null;
        BufferedWriter bufWriter = null;
        try {

            bufReader = new BufferedReader(new FileReader(file));
            bufWriter = new BufferedWriter(new FileWriter("d:/work/readFileByLine.txt"));

            String temp = null;
            while ((temp = bufReader.readLine()) != null) {
                bufWriter.write(temp+"\n");
            }
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            if (bufReader != null && bufWriter != null) {
                try {
                    bufReader.close();
                    bufWriter.close();
                } catch (IOException e) {
                    e.getStackTrace();
                }
            }
        }
    }

7、需要将字节流要转换成字符流时,Demo如下:

private static String getOuterIp() throws IOException {  
        InputStream inputStream = null;  
        BufferedReader bufferedReader = null;
        try {  
            URL url = new URL("http://1212.ip138.com/ic.asp");  
            URLConnection urlconnnection = url.openConnection();  
            inputStream = urlconnnection.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "GB2312");  //字节流转字符流,并且设置编码格式
            bufferedReader = new BufferedReader(inputStreamReader);  
            StringBuffer webContent = new StringBuffer();  
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                webContent.append(str);  
            }  
            int ipStart = webContent.indexOf("[") + 1;  
            int ipEnd = webContent.indexOf("]");  
            return webContent.substring(ipStart, ipEnd);  
        } finally {  
            if (inputStream != null && bufferedReader != null) {  
                inputStream.close();  
                bufferedReader.close();
            }  
        }  
    }



作者:击中流水
链接:http://www.jianshu.com/p/509c78602ed2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值