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 + "\n");
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("\n写入成功");
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

 

posted @ 2018-01-03 20:47  清风拂来  阅读(265)  评论(0编辑  收藏  举报