java 读写文件的两种方式

java 读写文件的两种方式1.情景展示在实际开发过程中,对于文件的读写操作也是经常碰到的,如何用java完成对文件的准确无误的读写呢?2.场景分析在java中,我们可以通过数据流(二进制)来完成对文件的操作;其中,数据

大家好,又见面了,我是你们的朋友全栈君。

1.情景展示

  在实际开发过程中,对于文件的读写操作也是经常碰到的,如何用java完成对文件的准确无误的读写呢?

2.场景分析

  在java中,我们可以通过数据流(二进制)来完成对文件的操作;

  其中,数据流有2种,一种是字节流,一种是字符流,这两种流各有特点,都能实现对文件的操作。

  举个例子:

<span role="heading" aria-level="2">java 读写文件的两种方式

  已知日志文件sys.log,需要对将前7行的内容放到TXT文件中,如何实现?

3.字符流

  使用字符流的方式,在网上比较常见,可以按字符(行)读取,也可以按字节读取;

  需要注意的是按行读取的时候,如果需要保留换行的话,需要自己手动添加换行符:\n,否则的话,内容输出只有一行;

public static void main(String[] args) {
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
        log.info("文件转字符输入流。。。");
        // 用字节输入流读取文件
        br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:\\workspace-idea\\logs\\bill\\sys.log"))));
        // 用字节输出流输出文件
        // 原文件如果存在,内容会被重写;原文件不存在,会被自动创建
        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream((new File("C:\\Users\\Marydon\\Desktop\\out2.txt")))));

        log.info("开始读取文件。。。");
        int lineNumber = 0;
        String lineText;
        // 按行读取
        while ((lineText = br.readLine()) != null) {
            log.debug("边读边写。。。");

            // 行号+1
            lineNumber++;

            // 非最后一行需要加换行符
            // 没有换行符的话,所有内容将会被输入到同一行
            lineText = (lineNumber > 6) ? lineText : lineText + "\n";
            // 将行内容写入文件
            bw.write(lineText);

            if (lineNumber > 6) {
                log.info("文件截取完毕。。。");
                break;// 第7行写入完毕,终止读取
            }
        }

        log.info("文件写入完毕");
    } catch (Exception e) {
        e.printStackTrace();
        log.error("文件读取或写入失败:" + e.getMessage());
    } finally {// 关闭流
        try {
            if (null != br) {
                br.close();
            }
            if (null != bw) {
                bw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}  

  另外,如果遇到读写文件出现乱码的情况,通常是写入的文件含中文时出现乱码,使用字符流的好处就在于:

  它可以决定以什么样的字符集读取文件内容,以及以什么样的字符集输出到文件当中。(注意:不能决定输出文件本身的字符集哦)

  通过InputStreamReader和OutputStreamWriter进行指定  

// 以指定字符集读取文件内容
br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:\\workspace-idea\\logs\\bill\\sys.log")),"UTF-8"));
// 以指定字符集输出到文件中
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream((new File("C:\\Users\\Marydon\\Desktop\\out2.txt"))),"GB2312"));

  通过OutputStreamWriter输出文件时,需要说明的有两点:

  第一,当要生成的文件不存在时,会被自动创建;

  第二,当原文件已经存在是,原文件内容会被覆盖掉。

<span role="heading" aria-level="2">java 读写文件的两种方式

4.字节流 

public static void main(String[] args) {
    InputStream bis = null;
    OutputStream bos = null;
    try {
        // 用字节输入流读取文件
        bis = new BufferedInputStream(new FileInputStream(new File("D:\\workspace-idea\\logs\\bill\\sys.log")));
        // 用字节输出流输出文件
        // 原文件如果存在,内容会被重写;原文件不存在,会被自动创建
        bos = new BufferedOutputStream(new FileOutputStream((new File("C:\\Users\\Marydon\\Desktop\\out.txt"))));

        int len;
        // 创建一个用于接收文件流的数组
        byte[] tempFilebytesArray = new byte[1024];

        while ((len = bis.read(tempFilebytesArray)) != -1) {
            // 1024个字节所转成字符串
            String tempText = new String(tempFilebytesArray, "UTF-8");
            // 包含指定字符串,终止读取
            if (tempText.contains("接收到的请求参数:")) {
                bos.write(tempText.substring(0, tempText.indexOf("接收到的请求参数:") + 9).getBytes("utf-8"));
                break;
            } else {
                bos.write(tempFilebytesArray, 0, len);
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {// 关闭流
        try {
            if (null != bis) {
                bis.close();
            }
            if (null != bos) {
                bos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}  

  实现效果与上方一样。

  通过BufferedOutputStream输出文件时,需要说明的有两点:

  第一,当要生成的文件不存在时,会被自动创建;

  第二,当原文件已经存在是,原文件内容会被覆盖掉。

  当然了,上面两种只是演示,在实际开发过程中,一般没有这么简单,但是,万变不离其宗,玩转了这两种方式,基本就没有问题了。     

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154558.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用Lucene检索文档中的关键字

    使用Lucene检索文档中的关键字

    2021年8月21日
    57
  • pycharm选择解释器_python高级编程

    pycharm选择解释器_python高级编程一、IDE配置解释器二、配置pip镜像按照【配置永久生效】全局配置文件Window系统下,文件夹路径中输入%APPDATA%,若没有pip目录创建,并在里面创建文件pip.ini,内容如下[global]timeout=6000index-url=https://pypi.mirrors.ustc.edu.cn/simple/tr…

    2022年8月27日
    4
  • 2021 pycharm激活码_通用破解码

    2021 pycharm激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    52
  • 【Latex】Latex插入图片「建议收藏」

    【Latex】Latex插入图片「建议收藏」\begin{figure}[h]%H为当前位置,!htb为忽略美学标准,htbp为浮动图形\centering%图片居中\includegraphics[width=0.5\textwidth]{figure1.png}%插入图片,[]中设置图片大小,{}中是图片文件名\caption{AistheVOCdataset,BistheVisDronedataset,CistheCOCOdataset,andDistheOUC-UAV-Detdataset}

    2022年5月25日
    27
  • 计算机桌面图片怎么设置大小,怎么设置桌面壁纸大小[通俗易懂]

    计算机桌面图片怎么设置大小,怎么设置桌面壁纸大小[通俗易懂]很多人都知道怎麽设置电脑桌面,可真正找到适合自己屏幕的可能很少,图片或大或小,小编为大家分享了设置桌面壁纸大小的方法,下面大家跟着小编一起来了解一下吧。设置桌面壁纸大小方法先查看自己电脑屏幕分辨率,方法:依次打开控制面板\外观和个性化\显示\屏幕分辨率。查看图片的大小:单击图片,将鼠标放在图片图标上,就能看到尺寸。双击图片,用windows照片查看器打开,点击”打开“,选择画图。假设屏幕分辨率:…

    2022年5月15日
    167
  • QQ图片制作跳转_我要自己制作头像

    QQ图片制作跳转_我要自己制作头像QQ图片跳转加群QQ群里看到一个好像视频的图片,点开却变成一个加群的链接,直接到了这是QQ里的一种插件,类似QQ群机器人,只不过现在很难能找到了,去年有段时间很火,使用插件生成以后发到群内或者QQ聊天内,可以自定义图片和超链接,点击可以跳转图片只是一个预览而已,因为现在的扣扣发网址会自动加载页面的内容预览出来就是一个图片,这个图片是网站制作人员事先设置好的,类似文档的预览图也就是脸面。比如你你发一个加群的链接到群里,然后系统自动加载网页,顺便脸面图片也显示出来了。你点击图片后当然就跳转到加群

    2022年8月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号