java文件读写

目录

一、字节流>字符流>字符串

二、java8简写方式

三、带缓冲的流读取,默认缓冲区8k


/**
 * 读取文件,以String形式返回
 * 字节流和字符流区别
 * 1)定义:字节流在操作时不会用到缓冲区(内存),直接对文件本身进行操作。但字符在操作时使用了缓存区,通过缓存区在操作文件
 * 在硬盘上所有文件都是以字节形式存在(图片、音频、视频),字符在内存中才会形成
 * 2)区别:如果程序频繁对资源做IO操作,使用字节流,效率会很低。使用字符流,把需要操作的数据暂存到内存中,以后直接从内存中读取,避免多次IO操作,提高效率
 * 但是,真正存储和传输数据,都是以字节为单位进行的,字符仅存在于内存,因此,字节使用范围更广
 * 3)使用:字节可以用来读取英文、图片、音视频更好
 * 中文最好使用字符流,可以提高效率
 *
 * @param jsonFile
 * @return
 */

一、字节流>字符流>字符串

    private static String readFile(String jsonFile) {
        StringBuilder stringBuilder = new StringBuilder();

        try {
//             01.FileInputStream(字节流) 实现了InputStream接口,用来读取文件中的字节流,参数是文件或者文件路径+文件名称
            FileInputStream fileInputStream = new FileInputStream(jsonFile);

            // 02.将 fileInputStream(字节流) 流作为参数,转为InputStreamReader(字符流)
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");

            // 03.将 字符流(参数)转为字符串流,带缓冲的流读取,默认缓冲区8k
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String tempString;

            while ((tempString = bufferedReader.readLine()) != null) {// 直接返回读取的字符串
                // 将字符串 添加到 stringBuilder中
                stringBuilder.append(tempString);
            }
            bufferedReader.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    returen stringBuilder.toString();
}

二、java8简写方式

try(管道流、连接等实现了Closeable接口的类){
  //这里使用类对象操作
}
//用try()包含起来,就不用在finally里面自己手动的去 Object.close()了,会自动的关闭

//         java8的简写方式
        try(BufferedReader br= Files.newBufferedReader(Paths.get(jsonFile))) {
            String str;
            while ((str=br.readLine())!=null){
                stringBuilder.append(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

三、带缓冲的流读取,默认缓冲区8k


        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(jsonFile))) {
            String tempString;
            while ((tempString = bufferedReader.readLine()) != null) {
                stringBuilder.append(tempString);
            }

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

四、java8 提供的newBufferedWriter可以创建文件,并向文件内写入数据

    public void testCreateFile() {
       
        String fileName = "test.txt";
        Path path1 = Paths.get(fileName);

        // 使用newBufferedWriter创建文件并写文件
        // 这里使用了try-with-resources方法来关闭流,不用手动关闭
        try (BufferedWriter writer = Files.newBufferedWriter(path1, StandardCharsets.UTF_8)) {
            writer.write("测试写入文件");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 追加写模式
        try (BufferedWriter writer = Files.newBufferedWriter(path1, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
            writer.write("测试追加写入");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值