zoukankan      html  css  js  c++  java
  • Java IO流总结(二)-示例

    1.使用文件操作的9大方法完成文件的判断

    判断文件或目录是否存在 : exits() 返回值boolean型
    * 判断是否是文件: isFile() boolean
    * 判断是否是目录: isDiectory() boolean
    * 返回此对象表示的文件的相对路径: getPath() String
    * 返回此对象表示的文件的绝对路径: getAbsolutePath() String
    * 返回此对象表示的文件或目录的名称: getName() String
    * 删除此对象指定的文件或目录: delete() boolean
    * 创建名称的空文件(不是文件夹): createNewFile() blloean
    * 返回文件的长度 单位为字节,如果文件不存在,则返回0L :length() long

     1 package cn.filetest;
     2 
     3 import java.io.File;
     4 import java.util.Scanner;
     5 
     6 public class TestFileMethods {
     7 
     8     /**案例1,使用文件操作的9大方法完成文件的判断
     9      * @param args
    10      * 判断文件或目录是否存在 : exits()  返回值boolean型
    11      * 判断是否是文件: isFile()  boolean
    12      * 判断是否是目录: isDiectory()  boolean
    13      * 返回此对象表示的文件的相对路径:  getPath()   String
    14      * 返回此对象表示的文件的绝对路径:  getAbsolutePath()  String
    15      * 返回此对象表示的文件或目录的名称:  getName() String
    16      * 删除此对象指定的文件或目录: delete()   boolean
    17      * 创建名称的空文件(不是文件夹): createNewFile()    blloean
    18      * 返回文件的长度 单位为字节,如果文件不存在,则返回0L  :length()   long
    19      */
    20     public static void main(String[] args) {
    21         try {
    22             fileClassMeth();
    23         } catch (Exception e) {
    24             e.printStackTrace();
    25         }
    26     }
    27 
    28     public static void fileClassMeth() throws Exception{
    29         
    30         //将异常抛出,由调用者处理!!!
    31             //1.实例化对象,指定判断的路径
    32                 File file = new File("aa\bb\3.txt");
    33             //2.判断1.txt是否存在 exits()
    34                 if(file.exists()) {
    35                     if(file.isDirectory()) {
    36                         //判断如果是目录,输出当前路径是文件夹
    37                         System.out.println("当前路径是文件夹");
    38                     } else {
    39                         System.out.println("当前路径是文件");
    40                         System.out.println("当前文件存在");
    41                         System.out.println("文件的绝对完整路径:" + file.getAbsolutePath() + file.getName());
    42                         System.out.println("文件名为:"  + file.getName());
    43                         System.out.println("文件的相对路径:"  + file.getPath());
    44                         System.out.println("文件的上一级目录:"  + file.getParent());
    45                         System.out.println("文件的长度:"  + file.length());
    46                     } 
    47                     System.out.println("请按1完成删除操作:");
    48                     Scanner input = new Scanner(System.in);
    49                     if(input.nextInt() ==1) {
    50                         boolean bool = file.delete();
    51                         if(bool) {
    52                             System.out.println("删除成功");
    53                         }
    54                     }
    55                     
    56                 } else {
    57                     System.out.println("当前文件不存在");
    58                     //3.当文件不存在,创建文件
    59                     boolean bool = file.createNewFile();
    60                     if(bool) {
    61                         System.out.println("创建文件成功");
    62                     }
    63                 }
    64                 
    65                 
    66     }
    67 }
    View Code

    2.字节流的读写操作:

    FileInputStream  fin = new FileInputStream("D:\temp\aa.txt");

    byte[] b = new byte[fin.available()]; // fin.available() 可读取的字节数

    fin.read(b); // 从内容索引号为1的位置读取2个字符并保存在字节数组b中,读取第一个字节数据并转换为该字节数据的ASCII码

    FileOutputStream fo = new FileOutputStream("D:\temp\b.txt",true); // true:追加, false :覆盖
    fo.write(b);

     1 package cn.filetest;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 
     7 public class TestFileMthods1 {
     8 
     9     /**
    10      * 案例1 字节流的读写操作 字节流的读: int asz = fin.read();
    11      * 
    12      */
    13     public static void main(String[] args) {
    14         fileReaderMehtod1(); // main()方法直接调用本类静态方法
    15     }
    16 
    17     public static void fileReaderMehtod1() {
    18         FileInputStream fin = null;
    19         FileOutputStream fo = null; // 为了能够在该静态方法任何位置访问,放在try语句外面
    20         try {
    21             // 1.实例化输入流,指向 1.txt文件,该文件必须事先存在!否则抛出fileNotFoundException
    22             fin = new FileInputStream("D:\temp\aa.txt");
    23             /*FileInputStream类的构造方法FileInputStream(String name)
    24              * 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定 */
    25             System.out.println("可读取字节个数为:" + fin.available());    // 2.定义一个字节数组(中转数组)
    26             byte[] b = new byte[fin.available()]; // fin.available() 可读取的字节数
    27             // 3.从输入流指向的地址1.txt中读取字节,存储在字节数组中
    28             // 读取一个字节到字节数组b中;fin.read()则是读取第一个字节数据并转换为该字节数据的ASCII码
    29             fin.read(b); // 从内容索引号为1的位置读取2个字符并保存在字节数组b中
    30             // 4.输出每个字节,输出结果是字母对应的ASCII码!!!!!fin.read(b)返回的是int类型!!!但写入的文件中会正常显示,而不是显示ASCII码
    31             for (byte c : b) {
    32                 System.out.print(c + "-" + (char) c + "
    ");
    33             }
    34             // 5.将字节输出到指定的路径下:
    35             fo = new FileOutputStream("D:\temp\b.txt",true);    // true:追加, false :覆盖
    36             fo.write(b);// 将字符数组b中的字节写入2.txt中
    37             System.out.println("
    写入成功");
    38         } catch (Exception e) {
    39             e.printStackTrace();
    40         } finally {// 6.关闭输入输出流
    41             try {
    42                 if (fo != null) {
    43                     fo.close();
    44                 }
    45                 if (fin != null) {
    46                     fin.close();
    47                 }
    48             } catch (IOException e) {
    49                 e.printStackTrace();
    50             }
    51 
    52         }
    53     }
    54 
    55 }
    View Code

    3.BufferedReader 、 BufferedWriter、 FileReader、FileWriter

    (1)BufferedReader类是Reader类的子类,它与FileReader类的区别在于BufferedReader带有缓冲区,可以先把一批数据读到缓冲区,接下来的读操作都是从缓冲区内获取数据,避免每次都从数据源读取数据进行字符换货,从而提高读取操作的效率:

    BufferedReader br2 = new BufferedReader(new FileReader(new File("D:\temp\aa.txt")));

    String line = br.readLine(); // BufferedReader类的readLine()方法返回一个字符串!!!每执行该语句一次,读取一行的内容

    (2)BufferedWriter类把一批数据写到缓冲区,当缓冲区写满时,再把缓冲区的数据写到字符输出流中,可以避免每次都执行物理写操作,提高输入输出操作的效率

    BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:\temp\2.txt")));

    bw.write("ddd");

    bw.flush(); // 刷新缓冲区写入

      1 package cn.filetest;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.BufferedWriter;
      5 import java.io.File;
      6 import java.io.FileNotFoundException;
      7 import java.io.FileReader;
      8 import java.io.FileWriter;
      9 import java.io.IOException;
     10 import java.io.Reader;
     11 import java.io.Writer;
     12 
     13 public class TestFileMethod2 {
     14 
     15     /**
     16      * BufferedReader 
     17      * BufferedWriter
     18      * FileReader
     19      * @param args
     20      */
     21     public static void main(String[] args) {
     22         charReader();
     23         BufReader();
     24         charWriter();
     25     }
     26 
     27     /**
     28      * 字符流的写(写入磁盘上的文件中)
     29      */
     30     public static void charWriter() {
     31         // 1.定义一个写入接口变量,将其子类FileWriter对象实例化
     32         Writer wr = null;
     33         BufferedWriter bw = null;
     34         // 2.实例化一个文件写入类的子类
     35         try {
     36             File fi = new File("D:\temp\2.txt");
     37             wr = new FileWriter(fi); // 创建一个FileWriter对象; 写入目的源为2.txt
     38             bw = new BufferedWriter(wr); // 创建一个BufferedWriter对象
     39             // 3.写入的内容
     40             wr.write(97); // 将AISIC码值为97的字符(a)写入2.txt
     41             wr.write("你好");
     42             wr.write(48);// 写入0
     43             bw.write("ddd");
     44             char[] zf = { 'a', 'b', '1' };
     45             wr.write(zf); // 写入字符数组
     46             bw.flush(); // 刷新缓冲区,才能写入
     47             System.out.println("写入成功");
     48         } catch (IOException e) {
     49             e.printStackTrace();
     50         } finally {
     51             if (wr != null) {
     52                 try {
     53                     wr.close();// 关闭流
     54                 } catch (IOException e) {
     55                     e.printStackTrace();
     56                 }
     57             }
     58         }
     59 
     60     }
     61 
     62     /**
     63      * BufferedReader
     64      */
     65     public static void BufReader() {
     66         // 1.导入IO包
     67         // 2.定义Reader接口的引用变量,只能实例化其子类对象FileReader
     68         Reader reader = null;
     69         BufferedReader br = null;
     70         try {
     71             // 3.实例化读取器
     72             File fi = new File("D:\temp\aa.txt");
     73             reader = new FileReader(fi);
     74             // 创建一个使用默认大小输入缓冲区的缓冲字符输入流对象br,将reader读取到的内容放在该缓冲区对象中。
     75             br = new BufferedReader(reader); // 使用字符流类BufferedReader和FileReader读取文本文件
     76             // 4.字符流,需要存储在一个字符数组中,定义一个字符数组
     77             String line = br.readLine(); // BufferedReader类的readLine()方法返回一个字符串!!!每执行该语句一次,读取一行的内容
     78             while (line != null) {
     79                 System.out.println("line:" + line);
     80                 line = br.readLine(); // 每执行该语句一次,读取一行的内容
     81             }
     82         } catch (Exception e) {
     83             e.printStackTrace();
     84         } finally {
     85             try {
     86                 if (reader != null) {
     87                     reader.close();
     88                 }
     89                 if (br != null) {
     90                     br.close();
     91                 }
     92             } catch (IOException e) {
     93                 e.printStackTrace();
     94             }
     95         }
     96 
     97     }
     98 
     99     /**
    100      * 字符流的读:FileReader
    101      */
    102     public static void charReader() {
    103         // 1.导入IO包
    104         // 2.定义Reader接口的引用变量,只能实例化其子类对象FileReader
    105         Reader reader = null;
    106         StringBuffer sbu = new StringBuffer();// 存放到StringBuffer里面
    107         try {
    108             // 3.实例化读取器
    109             File fi = new File("D:\temp\aa.txt");
    110             reader = new FileReader(fi);
    111             // 4.字符流,需要存储在一个字符数组中,定义一个字符数组
    112             char[] ch = new char[(int) fi.length() - 2];
    113             // 5.读取字符到字符数组中
    114             reader.read(ch);
    115             sbu.append(ch);// 追加
    116             System.out.println("追加后的字符串为:" + sbu);
    117         } catch (Exception e) {
    118             e.printStackTrace();
    119         } finally {
    120             try {
    121                 if (reader != null) {
    122                     reader.close();
    123                 }
    124             } catch (IOException e) {
    125                 e.printStackTrace();
    126             }
    127         }
    128 
    129     }
    130 
    131 }
    View Code

     4.二进制文件读写 : DataInputStream、DataOutputStream 

     1 package cn.filetest;
     2 
     3 import java.io.DataInputStream;
     4 import java.io.DataOutputStream;
     5 import java.io.FileInputStream;
     6 import java.io.FileOutputStream;
     7 import java.io.IOException;
     8 
     9 public class TestFileMethods3 {
    10 
    11     /**
    12      * @param args
    13      */
    14     public static void main(String[] args) {
    15         dataFileMethod();
    16     }
    17 
    18     public static void dataFileMethod() {
    19         // 1、实例化二进制输入流
    20         FileInputStream fis = null;
    21         DataInputStream dts = null;
    22         // 2、实例化文件和二进制输出流
    23         FileOutputStream fou = null;
    24         DataOutputStream dos = null;
    25         // 3、实例化对象
    26         try {
    27             fis = new FileInputStream("D:\java\Animal.class");
    28             dts = new DataInputStream(fis);
    29 
    30             fou = new FileOutputStream("d:/java/aaa.class");
    31             dos = new DataOutputStream(fou);
    32             // 4、读取并写入
    33             int temp;
    34             while ((temp = dts.read()) != -1) {
    35                 dos.write(temp);// 把每次读取的二进制数据循环写入到文件中
    36             }
    37         } catch (Exception e) {
    38             e.printStackTrace();
    39         } finally {
    40             try {
    41                 if (dts != null) {
    42                     dts.close(); // 关闭输入流
    43                 }
    44                 if (dos != null) {
    45                     dos.close(); // 关闭输出流
    46                 }
    47                 if (fis != null) {
    48                     fis.close();
    49                 }
    50                 if (fou != null) {
    51                     fou.close();
    52                 }
    53             } catch (IOException e) {
    54                 e.printStackTrace();
    55             }
    56         }
    57 
    58     }
    59 }
    View Code
  • 相关阅读:
    设计模式
    工厂方法模式
    简单工厂模式
    tornado自定义Form组件
    tornado
    Tornado框架的知识系列
    Linux基本命令
    day2
    day1
    使用cp复制文件夹却不能打开
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/8185600.html
Copyright © 2011-2022 走看看