字节输出流
1.构造方法
//1.创建字节输出流的对象 告诉虚拟机我要往哪个文件中写数据了
//如果文件不存在会自动创建
FileOutputStream fos = new FileOutputStream("D:\\a.txt");
//2.写数据(会把以前存在的内容覆盖)
//传递一个整数时 实际上写到文件中的是这个整数在码表中对应的字符串
fos.write(97);
//3.释放资源
fos.close();//不释放会一直占用a.txt导致无法删除
如果想要不覆盖原有数据,需要在路径后加一个true(不加的话在创建FileOutputStream对象时内容就会被全部覆盖)
FileOutputStream fos = new FileOutputStream("D:\\a.txt", true);
2.字节流写数据的三种方法
void write(int b)
void write(byte[] b)
void write(byte[] b, int off, int len)
//示例代码
FileOutputStream fos = new FileOutputStream("a.txt");
byte[] bytes = {97, 98, 99, 100, 101, 102, 103, 104, 105};
fos.write(bytes);
fos.write(bytes, 0, 5);//字节数组名, 起始下标, 总长度
fos.close();
3.写入数据时换行:
fos.write("\r\n".getBytes());//getByte()的作用是把字符串转换为一个字节数组
4.try catch finally
try {
file = new FileOutputStream("a.txt");
file.write(97);
} catch (Exception e){
e.printStackTrace();
} finally {
if (file != null){
try {
file.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
字节输入流
构造函数
FileInputStream file = new FileInputStream("a.txt");
char res = (char)file.read();//read()方法一次只能读取一个字节, 而且读到的是在码表中对应的数字
//所以要用(char)强转成字符
file.close();
System.out.println(res);
连续读取
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
int b;
while ((b = fis.read()) != -1){
System.out.println((char)b);
}
}
单字节复制
无参数的 read() 方法:
int read(): 读取一个字节的数据,并返回一个 int 值。如果读取到字节数据,则返回该字节的值(0-255), 没读取到就返回-1
FileInputStream fis = new FileInputStream("D:\\刷课\\浏览器版-1.2.0\\超星智慧树网课助手浏览器版V1.2.0\\运行此文件.exe");
FileOutputStream fos = new FileOutputStream("运行此文件.exe");
int b;
while ((b = fis.read()) != -1){
fos.write((char)b);
}
字节数组复制
有参数的 read(byte[] b) 方法:
int read(byte[] b): 读取数据到字节数组 b 中,并返回实际读取的字节数。如果没读取到,则返回 -1。
FileInputStream fis = new FileInputStream("D:\\剪辑\\抽奖\\002.mp4");
FileOutputStream fos = new FileOutputStream("002.mp4");
byte[] carray = new byte[1024];
while ((length = fis.read(carray)) != -1){
fos.write(carray, 0, length);
}
缓冲流
缓冲流 是在字节流基础上进行优化的流,使用内存中的缓冲区来减少对底层I/O的直接操作,从而提高效率。在底层和字节流通过字节数组复制一样, 内置了一个字节数组.
缓冲流单字节复制
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\剪辑\\抽奖\\202401082102.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("1.mp4"));
int b;
while((b = bis.read()) != -1){
bos.write(b);
}
bis.close();
bos.close();
}
缓冲流字节数组复制
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\剪辑\\抽奖\\202401082102.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("1.mp4"));
byte[] temp = new byte[1024];
int len;
while ((len = bis.read(temp)) != -1){
bos.write(temp, 0, len);
}
bis.close();
bos.close();
}