zoukankan      html  css  js  c++  java
  • java文件读取

      读取可以是以字节为单位读取,可以是以字符为单位,也可以是一整行。

      使用FileInputStream就是按照字节读取的一次读取一个字节,常用于读取二进制文件如图片,声音,影像等。

     1 try {
     2             aFileInputStream=new FileInputStream(aFile);
     3 //            FileInputStream aFileInputStream2=new FileInputStream("E:/a.txt");
     4             int ch;
     5             while((ch=aFileInputStream.read())!=-1)
     6             {
     7                 System.out.print((char)ch);
     8             }
     9         } catch (FileNotFoundException e) {
    10             // TODO Auto-generated catch block
    11             e.printStackTrace();
    12         } catch (IOException e) {
    13             // TODO Auto-generated catch block
    14             e.printStackTrace();
    15         }finally {
    16             if(aFileInputStream!=null)
    17             {
    18                 try {
    19                     aFileInputStream.close();
    20                 } catch (IOException e) {
    21                     // TODO Auto-generated catch block
    22                     e.printStackTrace();
    23                 }            
    24             }
    25         }

      建议首先建立一个文件引用,然后通过exists()检查文件是否存在,这样会比注释起来的那句代码,直接让它抛出异常处理要快,用完要注意把文件输入流关闭下面也是如此。

    使用FileReader或者InputStreamReader,以字符为单位读取一次读取一个字符的字节,常用于读文本,数字类文件。

     1 try {
     2             FileReader fileReader=new FileReader(aFile);
     3 //            FileReader aFileReader=new FileReader("E:/a.txt");
     4             int a;
     5             while((a=fileReader.read())!=-1)
     6             {
     7                 System.out.print((char)a);
     8             }
     9 
    10             fileReader.close();
    11         } catch (FileNotFoundException e) {
    12             // TODO Auto-generated catch block
    13             e.printStackTrace();
    14         } catch (IOException e) {
    15             // TODO Auto-generated catch block
    16             e.printStackTrace();
    17         }

      但是需要注意对于windows下,\r\n这两个字符在一起时,表示一个换行。但如果这两个字符分开显示时,会换两次行,因此,要屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。还可以直接读取多个字符

     1 try {
     2             FileReader fileReader=new FileReader(aFile);
     3 
     4             char[] a=new char[20];
     5             while(fileReader.ready())
     6             {
     7                 fileReader.read(a);//返回读取长度
     8             }
     9             System.out.println(String.valueOf(a));
    10             fileReader.close();
    11         } catch (FileNotFoundException e) {
    12             // TODO Auto-generated catch block
    13             e.printStackTrace();
    14         } catch (IOException e) {
    15             // TODO Auto-generated catch block
    16             e.printStackTrace();
    17         }

    这里的关闭输入流最好放在finally里面,可以避免抛异常后没有关闭的情况。

    最后BufferedReader可以以行的形式读取,常用于读面向行的格式化文件。

     1 BufferedReader bufferedReader=null;
     2         try {
     3             bufferedReader=new BufferedReader(new FileReader(aFile));
     4             String aString;
     5             while((aString=bufferedReader.readLine())!=null)
     6             {
     7                 System.out.println(aString);    
     8             }
     9             
    10         } catch (FileNotFoundException e) {
    11             // TODO Auto-generated catch block
    12             e.printStackTrace();
    13         } catch (IOException e) {
    14             // TODO Auto-generated catch block
    15             e.printStackTrace();
    16         }finally {
    17             if (bufferedReader!=null) {
    18                 try {
    19                     bufferedReader.close();
    20                 } catch (IOException e) {
    21                     // TODO Auto-generated catch block
    22                     e.printStackTrace();
    23                 }
    24             }
    25         }
    人生如水,不争高山,自然愈下,三年又三年。——struggle!
  • 相关阅读:
    最长回文 hdu3068(神代码)
    1297. Palindrome ural1297(后缀数组)
    705. New Distinct Substrings spoj(后缀数组求所有不同子串)
    Milk Patterns poj3261(后缀数组)
    Musical Theme poj1743(后缀数组)
    Conscription poj3723(最大生成树)
    Drying poj3104(二分)
    Finding LCM (最小公倍数)
    002 全局配置信息
    001 开始
  • 原文地址:https://www.cnblogs.com/PersistWp/p/7372861.html
Copyright © 2011-2022 走看看