zoukankan      html  css  js  c++  java
  • java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。

        java的输入输出建立在4个抽象类的基础上:InputStream、OutputStream、Reader、Writer。InputSream和OutputStream被设计成字节流类,而Reader和Writer被设计成字符流类。一般来说,处理字符或者字符串时应该使用字符流类,处理字节或者二进制对象时应该使用字节流类。

      一般在操作文件流时,不管是字节流还是字符流,都可以按照以下的方式进行。

    1、使用File类找到一个文件

    2、通过File类实例化字节流或字符流

    3、进行字节(字符)的读写操作

    4、关闭文件流

    下面是2个例子,向文件中写入字符串并读出。

    以字节流方式:

     1 package zdxtest;
     2 import java.io.*;
     3 public class TestFile1 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         //字节流输入输出,向一个文件写入内容然后读出
     8         File f = new File("d:\1.txt");
     9         FileOutputStream fos = null;
    10         FileInputStream foi = null;
    11         String sin = "今天是七月最后一天";
    12         //创建文件,如果目录下存在文件,先删除再创建
    13         if (f.exists()) {
    14             f.delete();
    15             try {
    16                 f.createNewFile();
    17             } catch (IOException e) {
    18                 // TODO Auto-generated catch block
    19                 e.printStackTrace();
    20             }    
    21         }
    22         else{
    23             try {
    24                 f.createNewFile();
    25             } catch (IOException e) {
    26                 // TODO Auto-generated catch block
    27                 e.printStackTrace();
    28             }
    29         }
    30         //实例化字节流子类:FileOutputStream
    31         try {
    32             fos = new FileOutputStream(f);
    33         } catch (FileNotFoundException e) {
    34             // TODO Auto-generated catch block
    35             e.printStackTrace();
    36         }
    37         //以字节的方式写入文件并关闭流
    38         byte[] b = sin.getBytes();
    39         try {
    40             fos.write(b);
    41             fos.close();
    42         } catch (IOException e) {
    43             // TODO Auto-generated catch block
    44             e.printStackTrace();
    45         }
    46         //实例化字节流子类:FileInputStream
    47         try {
    48             foi = new FileInputStream(f);
    49         } catch (FileNotFoundException e) {
    50             // TODO Auto-generated catch block
    51             e.printStackTrace();
    52         }
    53         //以字节的方式读取文件并关闭流
    54         byte[] c = new byte[1000];
    55         int  l=0;
    56         try {        
    57             /*l = foi.read();
    58             while(l!=-1){
    59                 System.out.println(String.valueOf(l));
    60                 l=foi.read();
    61             }*/
    62             l = foi.read(c);
    63             foi.close();
    64         } catch (IOException e) {
    65             // TODO Auto-generated catch block
    66             e.printStackTrace();
    67         }
    68         String o = new String(c);
    69         System.out.println(o); //打印文件内容
    70         System.out.println(l); //打印读取的字节数
    71 
    72     }
    73 
    74 }

    运行后输出:

    今天是七月最后一天

    27

    为什么是27个字节呢,因为我eclipse的默认编码方式是UTF-8,在UTF-8编码方式中,一个汉字是占有三个字节的,一共9个汉字,所以是27个字节。

    再来看以字符流的方式实现:

     1 package zdxtest;
     2 import java.io.*;
     3 
     4 public class FileTest2 {
     5 
     6     public static void main(String[] args) {
     7         // TODO Auto-generated method stub
     8         File f = new File("d:\2.txt");
     9         FileReader fr = null;
    10         FileWriter fw = null;
    11         String s = "明天是八月第一天";
    12         //创建文件,如果目录下存在文件,先删除再创建
    13         if(f.exists())
    14         {
    15             f.delete();
    16             try {
    17                 f.createNewFile();
    18             } catch (IOException e) {
    19                 // TODO Auto-generated catch block
    20                 e.printStackTrace();
    21             }
    22         }
    23         else{
    24             try {
    25                 f.createNewFile();
    26             } catch (IOException e) {
    27                 // TODO Auto-generated catch block
    28                 e.printStackTrace();
    29             }
    30         }
    31         //实例化字符流子类:FileWriter,以字符的方式写入文件并关闭流
    32         try {
    33             fw = new FileWriter(f);
    34             fw.write(s);
    35             fw.close();
    36         } catch (IOException e) {
    37             // TODO Auto-generated catch block
    38             e.printStackTrace();
    39         }
    40         //实例化字符流子类:FileReader,以字符的方式读取文件并关闭流
    41         char [] b = new char[1000];
    42         int l = 0;
    43         try {
    44             fr = new FileReader(f);
    45             l = fr.read(b);
    46         } catch (IOException e) {
    47             // TODO Auto-generated catch block
    48             e.printStackTrace();
    49         }
    50         System.out.println(new String(b));  //打印文件内容
    51         System.out.println(l);    //打印读取的字符数
    52     }
    53 
    54 }

    运行输出:

    明天是八月第一天

    8

    一共8个汉字,一个char存储一个汉字,所以是8个字符

  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/Eric-zhao/p/5724275.html
Copyright © 2011-2022 走看看