java IO整理及读写文件常见方式

一:流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在设备间传输称之为流。

流的本质是数据传输,根据数据传输的特性将流区分为各种类,方便更直观的进行数据操作。

 

二:流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

 2.1 字节流和字符流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

更详细可参考:

https://www.cnblogs.com/cberblog/p/15480083.html

 2.2 输入和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。  

 

三:IO流继承关系图

 

 

 

四:java读写文件常见方式

4.1一次读取所有文件
        String path = "/Users/changfan/test.txt";
        
        FileInputStream file = new FileInputStream(path);
        int available = file.available();
        byte[] bytes = new byte[available];

        int read = file.read(bytes);
        System.out.println(new String(bytes));
        file.close();
4.2 按行读取
        String path = "/Users/changfan/test.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(path)));
        String line = null;
        int count =0 ;
        while ( null!=(line = bufferedReader.readLine())){
            System.out.println("第[" + count + "]行数据:[" + line + "]");
            count++;
        }

 

4.3 字节流按行读取

 
        String path = "/Users/changfan/test.txt";
        StringBuffer stringBuffer = new StringBuffer();
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path), "UTF-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String s = bufferedReader.readLine();
        while (s!=null){
            stringBuffer.append(s).append("\r\n");
            s = bufferedReader.readLine();
        }

        System.out.println(stringBuffer);

 

4.4 写文件

        String s = "长帆";
        File file = new File("/Users/changfan/test1.txt");

        BufferedWriter bw = null;
        if (file.exists()){
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "utf-8"));
            bufferedWriter.write(s);
            bufferedWriter.flush();
            bufferedWriter.close();
        }else {
            System.out.println("文件不存在");
        }

 

 

参考链接

https://zhuanlan.zhihu.com/p/25418336

https://www.cnblogs.com/cberblog/p/15480083.html

posted @ 2023-03-19 22:12  changfan  阅读(85)  评论(0编辑  收藏  举报