File与IO流之字节流

FileOutputStream

  1. 创建字节输出流对象FileOutputStream fl =new FileOutputStream()
  • 传入的参数可以是字符串路径或者File对象(实际上如果传入字符串也会在内部创建File对象)
  • 如果文件不存在会在创建一个文件,但是必须保证其父级路径是存在的,这个和File是相似的
  • 如果文件存在,则会清空文件,你可以选择传入第二个参数(boolean),让对象是可以续写的
  1. 写数据fl.write(92)
  • 写入整数,显示对应ascii码值

  • 如果想一口气将字符写入文件:

    String str="hello World!"
    byte byte1[]=str.getBytes();
    fl.write(byte1);

  • 可以写入byte数组,并给出起始位置和总长度(可以不给)

  • 如果想让数据换行可以传入:

    String str="\n"
    byte byte1[]=str.getBytes();
    fl.write(byte1);

  1. 释放资源
  • 使用完都要进行释放,相当于解除对文件的占用

FileinputStream

  1. 创建字节输入对象FileInputStream fl =new FileInputStream()
  • 如果文件不存在,直接报错
  1. 读取数据fl.read()
  • 读取字节数据,将数据进行返回,且读取一次数据,就移动到下一个
  • 读到文件末尾方法返回-1
  1. 释放资源

练习:复制粘贴,并显示花费时长(毫秒)

复制代码
package Java_test;

import java.io.*;

public class Test {
	public static void main(String[] args) throws IOException{
		File fl =new File(".\\5.jpg");
		FileInputStream infile = new FileInputStream("C:\\Users\\Lenovo\\Pictures\\5665.jpg");
		FileOutputStream outfile = new FileOutputStream(fl);
		int b=0;
		long start = System.currentTimeMillis();
		while ((b = infile.read()) != -1) {
			outfile.write(b);
		}
		System.out.println("复制粘贴完成");
		long end = System.currentTimeMillis();
		System.out.println("总共花费时长:" + (end - start) + " 毫秒");
		outfile.close();
		infile.close();
	}
}

以上练习可以看出,一个字节一个字节进行读取速度会非常慢,为了更快的进行数据传输我们可以用int len = outfile.read(bytes)其中,bytes是字节型字符串,这行代码会读取文件中的数据,并尽可能的填满数组,读取的数据会从头对数组进行覆盖,如果覆盖不完全会使后面出现多余数据,其中数组长度最好是1024的整数倍

所以,我们可以利用他的返回值,len这个指的是读取数据的长度,System.out.println(new String(bytes,0,len));这个String是将从0开始len长度的数据转成字符串,并进行输出

相关推荐
Patrick在香港22 分钟前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录
java·python·docker·信息可视化·容器·数据分析·ai编程
上海安当技术34 分钟前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战
java·开发语言·python
我是唐青枫43 分钟前
Java JCommander 实战详解:用注解解析命令行参数
java·开发语言
大鹏说大话1 小时前
C++ 内存布局详解:类、虚函数、虚表底层原理
java·开发语言
还是鼠鼠1 小时前
Spring AI连接DeepSeek与通义千问:application.yaml配置详解
java·通义千问·spring ai·deepseek
计算机小白一个2 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
sunburn-3 小时前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea
vx-程序开发4 小时前
springboot农产品运输服务平台---附源码75498
java·javascript·spring boot·python·eclipse·django·php
zzh___zzh5 小时前
SQL 窗口函数 ROW_NUMBER、RANK、DENSE_RANK 常用方法笔记
java
计科土狗5 小时前
GESP六级专题之类与对象
java·前端·数据库