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 视频
';