java核心技术之IO流(二)FileInputStream和FileOutputStream
最后更新于:2022-04-01 09:58:41
### 简单的说明
从文件中读取和写入数据,我们要使用FileInputStream和FileOutputStream类来实现。只是要注意的是,这二个类处理的是字节(byte)型文件。
### FileInputStream和FileOutputStream
### FileInputStream类
构造方法:
FileInputStream(String path)
FileInputStream(File file)
关键方法:
read()
read(byte[] buffer, int byteOffset, int byteCount)
### FileOutputStream类
构造方法:
FileOutputStream(String path)
FileOutputStream(File file)
关键方法:
write(int oneByte)
write(byte[] buffer, int byteOffset, int byteCount)
### 一个测试的Demo
定义三个方法:
(1)testFileInputStream方法—读取文件内容
FileInputStream的使用方法:
~~~
//1.创建一个File对象
//2.创建一个FileInputStream对象
//3.调用read方法,读取内容数据
//4. 关闭对应的流
~~~
(2)testFileOutputStream方法—-往文件写内容
FileOutputStream的使用方法:
~~~
//1.创建一个File文件
//2.创建一个FileOutputStream对象
//3.调用write方法写入数据
//4.关闭对应的输出流
~~~
(3)copyFile方法—-复制文件的方法
~~~
//1.定义输入和输出的文件
//2.定义输入流和输出流的对象
//3.执行复制操作
//4.关闭对应的流,先关输出流,后关输入流
~~~
~~~
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStreamFileOutputStream {
//5.同时使用FileOutputStream和FileInputStream,实现二个文件的复制
//参数src为输入文件,参数des为输出文件,byteLength为每次复制的字节数
public static void copyFile(String src,String des,int byteLength){
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//定义输入和输出的文件
File fin = new File(src);
File fout = new File(des);
//定义输入流和输出流的对象
fis = new FileInputStream(fin);
fos = new FileOutputStream(fout);
//3.执行复制操作
byte[] b = new byte[byteLength];
int len;
while ((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//4.关闭对应的流,先关输出流,后关输入流
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fis != null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//4.FileOutputStream的使用
public static void testFileOutputStream(){
//2.创建一个FileOutputStream对象
FileOutputStream fos = null;
try {
//创建一个File文件
File f1 = new File("file_output_stream.txt");
fos = new FileOutputStream(f1);
String str= new String("test FileOutputStream");
//调用write方法写入数据
fos.write(str.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fos != null){
//关闭对应的输出流
fos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//3.FileInputStream的使用
public static void testFileInputStream(){
//2.创建一个FileInputStream对象
FileInputStream fis = null;
try {
//1.创建一个File对象
File f1 = new File("hello.txt");
fis = new FileInputStream(f1);
byte[] b = new byte[10] ;
int len;
//3.调用read方法,读取内容数据
while ((len = fis.read(b))!= -1) {
//System.out.print(b.toString());
for(int i=0;i<len;i++){
System.out.print((char)b[i]);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
//4. 关闭对应的流
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
~~~
调用:
~~~
//3.FileInputStream的使
FileInputStreamFileOutputStream.testFileInputStream();
//4.FileOutputStream的使用
FileInputStreamFileOutputStream.testFileOutputStream();
//5.同时使用FileOutputStream和FileInputStream,实现二个文件的复制
long t1 = System.currentTimeMillis();
FileInputStreamFileOutputStream.copyFile("data.bmp","data_01.bmp",10);
long t2 = System.currentTimeMillis();
System.out.print("复制文件消耗的时间:"+(t2 - t1));//100-60 10 -551
~~~
参考资料:
1.FileInputStream api文档
android_sdk_docs_offline/reference/java/io/FileInputStream.html
2.FileOutputStreamapi文档
android_sdk_docs_offline/reference/java/io/FileOutputStream.html
3.FileOutputStream与FileInputStream 视频