Java文件流使用总结

前言

其实对于刚学Java的人来说,对文件流的概念总是很模糊,我记得我当时就是懵懵懂懂,而且文件流操作伴随着一堆try-catch代码,乱七八糟的,看的头疼。今天来总结一下文件流相关概念吧

简述

Java读写文件流分为两大类:字节流、字符流

字节流:可以处理所有类型的数据,包括音频视频图片,主要操作byte类型数据

字符流:只能处理文本数据

// 输入流只能读
// 输出流只能写 

                    FileInputStream
       InputStream
                    FilterInputStream - BufferedInputStream

字节流  

                    FileInputStream
       OutputStream
                    FilterInputStream - BufferedOutputStream




                    InputStreamReader - FileReader
            Reader
                    BufferedReader

字符流

                    OutputStreamWriter - FileWriter
            Writer 
                    BufferedWriter

// BufferedInputStream是带缓冲区的输入流,默认缓冲区大小8M, 能够减少访问磁盘的次数,提高文件读取性能
// BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入效率

使用

// 一般分为以下几步
    // 创建文件对象
    File file = new File("xxx.txt");
    // 用流装载文件
    FileReader fileReader = new FileReader(file);
    // 如果用缓冲区, 则用缓冲区装载流
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    // 开始读写操作
    String str = null;
    while((str = bufferedReader.readLine()) !- null) {
        stringBuffer.append(str);
    }
    
    // 如果字节流要转换成字符流,则在缓冲区前加
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream)
    // 或者需要编码的, 在缓冲区前加 
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8")

 

// 字节流文件操作
// 其实很简单, new对象, 循环, 读写, catch异常, 在finalyly中关闭流
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("sdcard/data/pengbo.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();
            }
        }
    }
}

 

// 字符流文件操作
// 也很简单, 和字节流是一个道理
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("sdcard/data/pengbo.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();
            }
        }
    }
}

 

// 按行读写
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();
            }
        }
    }
}
// 字节流转换成字符串
// 网络请求的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();
        }  
    }  
}  

随机访问文件

使用随机访问文件,可以从文件读取以及写入文件,使用随机访问文件,我们可以在文件的任何位置读取或写入

RandomAccessFile类的一个对象可以进行随机文件访问

具体使用就不介绍了,贴个W3Cschool的链接:Java随机访问文件

总结

IO流其实就是这些基本的操作,一些基础的东西,也没什么难点,只要理解了就OK了

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值