Java:字节流 文件输出与读入方法 并 实现文件拷贝

news2024/11/17 8:49:18

文章目录

    • 字节 流
      • FileOutputStream
      • 换行 与 续写
      • FileInputstream
      • 实现 文件拷贝(字节数组 读入方法)
      • 字节流 编码

字节 流

FileOutputStream

  1. 创建对象,指定位置(产生数据传输通道)
    参数可以是File对象,也可以是路径
    如果文件不存在,且父级路径正确,会新建文件
    如果文件存在,会清空文件
  2. 写出数据
    ASCII对应 字符
    可以传入字节流,指定起始位置,长度
  3. 释放资源
    解除资源占用
package com.io.testdemo1;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class test1 {
    public static void 	main(String[] args) throws IOException {

        // 创建对象,指定位置(产生数据传输通道)
        FileOutputStream fos = new FileOutputStream("src/aaa.txt");

        // 写入数据
        fos.write(97);
        byte[] bytes = {97, 98, 99, 100};
        fos.write(bytes);
        fos.write(bytes, 0, 2);

        // 释放资源
        fos.close();
    }
}

在这里插入图片描述

换行 与 续写

换行:
write(“\r\n”) 即可 linux只写\n即可 mac写\r
\r 表示回车 \n 表示换行
早期\r表示,回到此行开头,\n才表示换行,一直沿用了下来。

续写: 在输出流对象的第二个参数中,加入true,表示打开续写开关。

例子:

package com.io.testdemo1;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class test1 {
    public static void main(String[] args) throws IOException {

        FileOutputStream fos = new FileOutputStream("src/aaa.txt", true);

        // 写入数据
        String str1 = "hello";
        byte[] bytes1 = str1.getBytes();
        fos.write(bytes1);

		// 写入换行
        String str2 = "\r\n";
        byte[] bytes2 = str2.getBytes();
        fos.write(bytes2);

        fos.close();
    }
}

运行两次的结果:
在这里插入图片描述

可以发现第二次续写了,并没有清空,同时换行了。

FileInputstream

与输出相似。

  1. 创建对象(搭建桥梁)
    如果文件不存在则直接报错
  2. 读入(返回值为int)
    一次读一个字节,ASCII对应的数字 (每次读相当于一次指针的移动)
    读到末尾时返回-1
  3. 释放资源
package com.io.testdemo2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class test2 {

    public static void main(String[] args) throws IOException {

		// 创建对象
        FileInputStream fis = new FileInputStream("src/aaa.txt");

		// 循环 读入
        int b; // 用变量去接收,要是条件和循环体内都read会跳两次
        while ((b = fis.read()) != -1) {
            System.out.print((char)b);
        }
		// 释放资源
        fis.close();
    }
}

运行结果与文件内容相同,说明成功读取成功:
在这里插入图片描述
在这里插入图片描述

实现 文件拷贝(字节数组 读入方法)

read可以传入byte数组,这样可以一次读入一个字节数组大小,速度会快很多,大小最好为1024的整数倍。

注意:返回值变成了长度,读完会返回-1。

将aaa.txt拷贝bbb.txt:

package com.io.copydemo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class test3 {
    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("src/aaa.txt");
        FileOutputStream fos = new FileOutputStream("src/bbb.txt");

        byte[] bytes = new byte[4096];
        int len;
        while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }

        fis.close();
        fos.close();
    }
}

运行结果:
在这里插入图片描述

字节流 编码

最好不要用字节流取读取文本文件。
编码和解码要统一。

idea默认utf-8,字母1字节,汉字3字节
eclipse默认jbk,字母1字节,汉字2字节

package com.io;

import java.io.UnsupportedEncodingException;

public class demo4 {
    public static void main(String[] args) throws UnsupportedEncodingException {

        String str = "abc你好";

        byte[] bytes = str.getBytes("GBK");

        String res1 = new String(bytes, "GBK");
        String res2 = new String(bytes, "UTF-8");

        System.out.println(res1); // abc你好
        System.out.println(res2); // abc���
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python time模块详解

time 模块主要包含各种提供日期、时间功能的类和函数。该模块既提供了把日期、时间格式化为字符串的功能,也提供了从字符串恢复日期、时间的功能。 在 Python 的交互式解释器中先导入 time 模块,然后输入 [e for e in dir(time) if not e.startswith(_)…

最简单的基于 FFmpeg 的音频解码器

最简单的基于 FFmpeg 的音频解码器 最简单的基于 FFmpeg 的音频解码器正文参考工程文件下载 参考雷霄骅博士的文章,链接:最简单的基于FFMPEGSDL的音频播放器:拆分-解码器和播放器 最简单的基于 FFmpeg 的音频解码器 正文 FFmpeg 音频解码器…

c++新经典模板与泛型编程:标准库容器中元素类型的萃取

通过容器(数组)类型萃取元素类型 用GetEleType类模板进行常规实现 #include <iostream>#include <vector> #include <list>// 泛化版本 template<typename T> struct GetEleType;// 特化版本 template<typename T> struct GetEleType<std::v…

Elasticsearch:向量数据库的真相

通过工作示例了解什么是向量数据库、它们如何实现 “相似性” 搜索以及它们可以在明显的 LLM 空间之外的哪些地方使用。除非你一直生活在岩石下&#xff0c;否则你可能听说过诸如生成式人工智能和大型语言模型&#xff08;LLM&#xff09;之类的术语。 除此之外&#xff0c;你很…

Rellax.js,一款超酷的 JavaScript 滚动效果库

嗨&#xff0c;大家好&#xff0c;欢迎来到猿镇&#xff0c;我是镇长&#xff0c;lee。 又到了和大家见面的时间&#xff0c;今天和大家分享一款轻松实现视差滚动效果的 JavaScript 库——Rellax.js。无需大量的配置&#xff0c;即可为你的网站增色不少。 什么是Rellax.js&am…

Flutter自定义下拉选择框dropDownMenu

利用PopupMenuButton和PopupMenuItem写了个下拉选择框&#xff0c;之所以不采用系统的&#xff0c;是因为自定义的更能适配项目需求&#xff0c;话不多说&#xff0c;直接看效果 下面直接贴出代码、代码中注释写的都很清楚&#xff0c;使用起来应该很方便&#xff0c;如果有任何…

【完整项目】双模式答题卡识别软件中YOLO模式的训练部分详解,包括训练填涂区域和手写准考证号,手把手详细教学,可延申拓展训练其他图像数据

目录 前言1. 数据准备2. 数据标注3. 先跑起来Windows下用本地的CPU或GPU训练本地Windows系统连接服务器训练前言 前文:【完整项目】基于Python+Tkinter+OpenCV+Yolo+手写OCR的双模式答题卡识别软件的设计与实现 如果你需要训练自己的答题卡模型,那么请先看上面的文章链接。…

uniapp自定义的日历(纯手写)

效果图&#xff1a; html&#xff1a; <!-- 年月 --><view class"box"><view class"box_time"><view class"time"><image click"lefts" :src"url/uploads/20231206/9d1fb520b12383960dca3c214d84fa0…

uniapp图片预览

用的是Uview组件库里面的 直接在页面写上&#xff1a; <u-album singleSize"100" :urls"[https://lxt.jingyi.icu/item.img]"></u-album> 这图片路径是我自己的 你们可以按照组件库里面的方法去实现

掌握JavaScript继承的精髓:原型继承、构造函数继承以及组合继承的实现技巧

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-Javascript如何实现继承&#xff1f; 目录 一、是什么 二、实现方式 …

智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜉蝣算法4.实验参数设定5.算法结果6.参考文献7.MA…

侮辱性涨薪!业绩得了S,调薪涨了450

信安这个行业3年前各大媒体&#xff0c;信安自己人都觉得自己在个朝阳行业&#xff0c;红利在咋弄不得再吃5年。 现在拉个干网络安全的再去问问&#xff0c;看看谁不是去年年终奖砍了一半、或者根本就没了&#xff0c;再或者每天岌岌可危生怕去领大礼包。 原本10月份的激励性…

python变量的命名和使用

变量名只能包含字母、数字和下划线 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头&#xff0c;但不能以数字打头。例如&#xff0c;可将变量命名为message_1&#xff0c;但不能将其命名为1_message。 Python 语言中&#xff0c;以下划线开头的标识符有特殊含…

普冉(PUYA)单片机开发笔记(5): 配置定时器PWM输出

概述 定时器的输出通道作为 PWM 驱动是 MCU 的常用功能。 PY32F003 有一个高级定时器 TIM1 和一个通用定时器 TIM3&#xff0c;这两个定时器都可以驱动4个输出通道。现在我们就利用 TIM1 的某一个通道实现可控占空比的 PWM 输出。 原理简介 看数据手册&#xff0c;简单摘录…

【文件上传系列】No.2 秒传(原生前端 + Node 后端)

上一篇文章 【文件上传系列】No.1 大文件分片、进度图展示&#xff08;原生前端 Node 后端 & Koa&#xff09; 秒传效果展示 秒传思路 整理的思路是&#xff1a;根据文件的二进制内容生成 Hash 值&#xff0c;然后去服务器里找&#xff0c;如果找到了&#xff0c;说明已经…

AI模型平台Hugging Face存在API令牌漏洞;大型语言模型与任务模型

&#x1f989; AI新闻 &#x1f680; AI模型平台Hugging Face存在API令牌漏洞&#xff0c;黑客可窃取、修改模型 摘要&#xff1a;安全公司Lasso Security发现AI模型平台Hugging Face上存在API令牌漏洞&#xff0c;黑客可获取微软、谷歌等公司的令牌&#xff0c;并能够访问模…

若依框架启动过程中遇到的控制台使用npm i下载相关依赖报错的问题以及前端启动遇到的问题

目录 报错截图问题解决其他问题 npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。问题解决更改环境变量新建系统变量 其他问题 错误解决Error: error:0…

外贸建站要国外服务器吗?海外服务器推荐?

外贸建站如何选国外服务器&#xff1f;海洋建站用什么服务器好&#xff1f; 外贸建站已经成为企业拓展国际市场的一项重要举措。然而&#xff0c;一个关键问题摆在许多企业面前&#xff1a;外贸建站是否需要选择国外服务器呢&#xff1f;这个问题涉及到多方面的考虑因素&#…

idea开发环境配置

idea重新安装后&#xff0c;配置的东西还挺多的&#xff0c;这里简单记录一下。 1、基础配置 1.1、主题、背景、主题字体大小 1.2、默认字体设置 控制台默认编码设置&#xff1a; 全局文件默认编码设置&#xff1a; 2、构建、编译、部署配置 说明&#xff1a;本地装了JD…

10 大 Mac 数据恢复软件深度评测

对于任何依赖计算机获取重要文件&#xff08;无论是个人照片还是重要商业文档&#xff09;的人来说&#xff0c;数据丢失可能是一场噩梦。值得庆幸的是&#xff0c;有多种专门为 Mac 用户提供的数据恢复工具&#xff0c;可以帮助检索丢失或意外删除的文件。在本文中&#xff0c…