Java IO流,文件字节输入流,字节输出流,读、写操作以及文件copy复制(边读边写)
程序员文章站
2022-04-08 23:17:01
...
文件字节输入输出流演示,及文件copy复制演示
Java IO流,文件字节输入流,字节输出流,读、写操作以及文件copy(边读边写)
关于文件字节方式的 读 ,写
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileInputStream (万能的)
-
1、文件字节输入流,万能的,任何类型的文件都可以采用这个流来读。
2、完成输入的操作,完成读的操作(硬盘—>内存)FileInputStream
类的其它常用方法-
int available()
:返回流当中剩余的没有读到的字节数量- 当文件字节非常小的时候,读的时候可以直接读完。
new byte[fis.available()]
-
long skip(long n)
: 跳过几个字节不读。
-
FileInputStream演示
package com.newedu.javabase.dayexercise.v7;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest04 {
public static void main(String[] args) {
//创建文件字节输入流对象
FileInputStream fis = null;
//进行 try...catch 捕获异常
try {
fis = new FileInputStream("文件地址");
//准备一个byte数组
byte[] bytes = new byte[4]; //4,一次读取4个字节
int readCount = 0; //用于接受fis.read()的返回值,返回值为:读取的字节个数。
while((readCount = fis.read(bytes)) != -1){
System.out.print(new String(bytes,0,readCount));
}
} catch(FileNotFoundException e) { //文件未找到 异常
e.printStackTrace();
} catch (IOException e) { //IO异常
e.printStackTrace();
} finally { //finally代码块内写fis.close(),确保流能够关闭。
if(fis != null) {
try {
fis.close(); //关闭流
} catch(IOException e) { //捕获异常
e.printStackTrace();
}
}
}
}
}
/*
运行结果:和原文一致
aaa
ababab
sssss
sss sss
fffff
*/
java.io.FileOutputStream (万能的)
- 文件字节输出流,负责写。
- 从内存到硬盘。
FileOutputStream演示
package com.newedu.javabase.dayexercise.v7;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest01 {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
// 若果所在地址,没有temp3文件,则创建temp3文件
//方式 一
// 这种方式谨慎使用,种种方式会现将文件清空,然后重新写入。
//fos = new FileOutputStream("C:/Java/tempfile/temp3");
//方式二
//以追加的方式在文件末尾写入,不会清空原文。
// new FileOutputStream(String name,boolean append);
fos = new FileOutputStream("C:/Java/tempfile/temp3",true);
//开始写
byte[] bytes = {97,98,99};//a,b,c
//将byte数组全部写出!
fos.write(bytes); //abc
//将byte数组部分写出!
fos.write(bytes,0,2);//ab
//结果:abcab
//字符串
String s = "我是一个中国人,我骄傲。";
//将字符串转化为byte数组
byte[] bs = s.getBytes();
//写
fos.write(bs);
// abcab我是一个中国人,我骄傲。
//写完之后一定刷新
fos.flush();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fos != null) {
try {
fos.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
文件copy(边读边写)
-
使用
FileInputStream
+FileOutputStream
完成文件的拷贝。 -
拷贝的过程应该是一边读,一边写。
-
使用以上的字书流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。
Copy演示
package com.newedu.javabase.dayexercise.v7;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 使用FileInputStream + FileOutputStream 完成文件的拷贝。
* 拷贝的过程应该是一边读,一边写。
* 使用以上的字书流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。
*
*/
public class CopyTest01 {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//创建一个输入流对象,
fis = new FileInputStream("C:\\User\\Videos\\java\\练习视频.avi");
//创建一个输出流对象,
fos = new FileOutputStream("C:\\Java\\copyTest\\练习视频.avi", true);
//最核心的:一边读,一边写。
byte[] bytes = new byte[1024*1024]; //1MB (一次最多拷贝1MB)
int readCount = 0;
while((readCount = fis.read(bytes)) != -1) {
fos.write(bytes,0,readCount);
}
//刷新,输出流最后要刷新
fos.flush();
//捕获异常
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//两个流关闭的时候应该怎么try catch
//:分开try catch
//因为一起try的时候,其中一个出现异常会会影响到另一个流的关闭。
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
最后查看源文件和copy文件属性,字节数一致说明完全copy。
ヾ(◍°∇°◍)ノ゙
上一篇: Python教程之src转为html
下一篇: python下载文件