必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java 文件流一:字节流(FileInputStream 和 FileOutputStream)

时间:2019-08-21 11:41:04来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

fileinputstream

 java文件流操作是一个非常重要的内容。下图列举了关于Java基本的文件流操作,当然目前还有NIO,这个后来会进行讨论,先看基本的文件流操作。我们主要使用的是访问文件的流和缓冲流。

文件的流操作一般包含字符流和字节流,两者区别在于,字符流每次传播16bit数据,字节流一次读取8bit数据。这里先对Java中字节流的使用展开讨论。

必须明确一个概念,流操作包含了输入输出流,其中,输出流指的是文件流输出,也就是将文件流输出到磁盘或者数据库;输入流是从磁盘或者数据库中读取流数据,并打印出来。下面以代码来给大家做个展示。

1 fileinputstream 文件读入

//使用byte[]数组进行读取文件

   public void testInput() {

       File file=new File("D:\\test.txt");//此处读取的为txt文本,也可以是图片或者其他,但是打印结果会比较尴尬,具体可以试试

       FileInputStream fis=null;

       try {

           fis=new FileInputStream(file);

           byte[] b=new byte[5];//读取数据到数组,这里根据读取的问件定大小,图片或者视频可以采用1024以及其倍数

           int len;//每次读入byte的字节长度,到末尾为-1

           while((len=fis.read(b))!=-1) {

               /*这里的i的阈值一定为len 因为len不是固定的 在读到文件末尾时 len

               与每次固定读入长度(这里是 5)不一样

               */

               for(int i=0;i<len;i++) {

                   System.out.println((char)b[i]);

               }

               /*或者这样打印

               String str=new String(b,0,len);

               System.out.println(str);*/

           }

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printstacktrace();

       }finally {

           if(fis!=null)

               try {

                   fis.close();//关文件操作 必须要有!!!

               } catch (IOException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

               }

           

       }

       

   }

2 文件输出 Fileoutputstream

 //文件流输出

   public void testOutput() {

       //输出目标(其目标可以不存在 可以在程序执行中自行创建,若存在会自动覆盖文件)

       File file=new File("D:test1.txt");

       //创建一个FileOutputStream对象 将file作为参数传入

       FileOutputStream fos=null;

       try {

           fos=new FileOutputStream(file);

           //向文件中写东西(覆盖写法)

           fos.write(new String("I love China").getBytes());

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally {

           if(fos!=null) {

               try {

                   fos.close();

               } catch (IOException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

               }

           }

       }

       

   }

3 有了输入和输出的样例,其实我们就可以将文件的输入输出封装为一个工具类,具体操作如下:

//其中 src dst分别为文件的 源地址和目标地址

public void copyFile(String src,String dst) {

       //1 提供读入 输出文件(字节流)(可以为txt 或者 图片 视频等)

               File file1=new File(src);

               File file2=new File(dst);    

               //提供流对象

               FileInputStream fis=null;

               FileOutputStream fos=null;

               try {

                   fis=new FileInputStream(file1);

                   fos=new FileOutputStream(file2);

                   // 实现文件复制

                   byte[] b=new byte[10];//读取字节长度,根据所传文件大小来定,图片视频一般为1024及其倍数

                   int len;//每次读入的长度

                   while((len=fis.read(b))!=-1) {

                       //写入文件

                       fos.write(b, 0, len);

                   }

                   

               } catch (IOException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

               }finally {

                   //先关输出

                   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();

                       }

                   }

        }

   }

方法调用:

public static void main(String[] args) {

       String src="D:\\test.txt";//源地址

       String dst="D:\\test1.txt";//目标地址

       copyFile(src,dst);//进行copy(注意这个方法在这个类里面要是静态,因为直接被main 方法调用了)

   }

就可以看到 D盘里有一个test1.txt.

【注意】这里根据字节流进行操作,读取中文时,是读不出来的,因为汉语为字符。后来会对其进行讨论。

相关阅读

java反射之Method的invoke方法实现

在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对

使用@Autowired 自动装载,报java.lang.NullPointerExce

使用@Autowired 自动装载,但是报java.lang.NullPointerException错误, 后来测试,发现如下图所示,jdbcTemplate输出为null 经反复研

Android自定义字体样式Typeface的三种技术方案:Java代

Android实现自定义的字体Typeface,正常情况下有两种情况:第一种:把字体ttf文件放到assets/fonts目录下,然后通过读取字体文件.ttf获取

java通配符的详解

在java中,?代表通配符。 通配符用法 1. 在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义 2. <? exte

Java数组类型

数组是一种数据结构,用来存储同一类型之的集合。通过一个整形下标可以访问数组中的每一个值。在声明数组变量时,需要指出数据类型和

分享到:

栏目导航

推荐阅读

热门阅读