java常用类解析四:I/O流典型使用方式

本文介绍Java中文件输入输出的基本操作,包括使用不同类如BufferedReader、DataInputStream等进行文本文件的读写,以及如何利用RandomAccessFile进行随机访问读写。
[java]   view plain copy
  1. package http;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.FileReader;  
  6. import java.io.FileWriter;  
  7. import java.io.IOException;  
  8.   
  9. /* 
  10.  * Read和Write分别对应InputStream和OutputStream 
  11.  * 前者用于字符流,后者用于字节流 
  12.  * FileReader和FileWrite分别对应与FileInputStream和FileOutputStream 
  13.  * BufferedReader和BufferedWrite分别对应与BufferedInputStream和 
  14.  * BufferedOutputStream 
  15.  * 此示例实现文本文件的字符读写 
  16.  */  
  17. public class FileReaderAndBufferedReaderDemo {  
  18.     public static String read(String fileName) throws IOException {  
  19.         StringBuilder str = new StringBuilder();  
  20.         BufferedReader in = new BufferedReader(new FileReader(fileName));  
  21.         String s;  
  22.         while ((s = in.readLine()) != null)  
  23.             str.append(s + '\n');  
  24.         in.close();  
  25.         return str.toString();  
  26.     }  
  27.   
  28.     public static void write(String fileName, boolean append)  
  29.             throws IOException {  
  30.         BufferedWriter out = new BufferedWriter(  
  31.                 new FileWriter(fileName, append));  
  32.         out.write("我是dahai!java hello!");  
  33.         out.close();  
  34.     }  
  35.   
  36.     public static void main(String[] args) {  
  37.         try {  
  38.             write("file/test3.txt"false);  
  39.             System.out.println(read("file/test3.txt"));  
  40.         } catch (IOException e) {  
  41.             // TODO Auto-generated catch block  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45. }  


 

[java]   view plain copy
  1. package http;  
  2.   
  3. import java.io.ByteArrayInputStream;  
  4. import java.io.DataInputStream;  
  5. import java.io.IOException;  
  6.   
  7.   
  8. /* 
  9.  * DataInputStream用于读取格式化的数据 
  10.  */  
  11. public class DataInputStreamAndByteArrayInputStreamDemo {  
  12.     public static void main(String[] args) throws IOException {  
  13.         DataInputStream in = new DataInputStream(new ByteArrayInputStream(  
  14.                 FileReaderAndBufferedReaderDemo.read("file/test3.txt")  
  15.                         .getBytes()));  
  16.         while (in.available() != 0)  
  17.             System.out.print((char) in.readByte());  
  18.   
  19.     }  
  20. }  


 

[java]   view plain copy
  1. package test;  
  2.   
  3. import http.FileReaderAndBufferedReaderDemo;  
  4.   
  5. import java.io.IOException;  
  6. import java.io.StringReader;  
  7. /* 
  8.  * StringReader操作的是字符串 
  9.  */  
  10. public class StringReaderDemo {  
  11.     public static void main(String[] args) throws IOException {  
  12.         StringReader in = new StringReader(FileReaderAndBufferedReaderDemo  
  13.                 .read("file/test3.txt"));  
  14.         int c;  
  15.         while ((c = in.read()) != -1)  
  16.             System.out.print((char) c);  
  17.     }  
  18. }  


 

[java]   view plain copy
  1. package test;  
  2.   
  3. import http.FileReaderAndBufferedReaderDemo;  
  4.   
  5. import java.io.IOException;  
  6. import java.io.PrintWriter;  
  7.   
  8. /* 
  9.  * 对应于PrintStream 
  10.  * 用于格式化输出到文件 
  11.  */  
  12. public class PrintWriterDemo {  
  13.     public static void main(String[] args) throws IOException {  
  14.         // 简化的创建方式  
  15.         PrintWriter out = new PrintWriter("file/test4.txt");  
  16.         // 也可以这样创建: out=new Printer(new BufferedWriter(new  
  17.         // FileWriter("file/test4.txt")));  
  18.         // 格式化输出到文本  
  19.         out.println('a');  
  20.         out.println(3);  
  21.         out.println(3.5);  
  22.         out.print("我爱你!i love you");  
  23.         out.close();  
  24.         // 从文本读取刚才的写入  
  25.         System.out.println(FileReaderAndBufferedReaderDemo  
  26.                 .read("file/test4.txt"));  
  27.     }  
  28.   
  29. }  


 

[java]   view plain copy
  1. package test;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.IOException;  
  5. import java.io.RandomAccessFile;  
  6.   
  7. /* 
  8.  * RandomAccessFile直接继承Object,可以进行随机输入和输出,类似于c语言的文件操作 
  9.  * 要指明以什么方式打开文件,用这个类时要知道文件的排版,该类有读写基本类型和UTF-8字符串 
  10.  * 的各种方法,可以定位到文件的某一位置进行读写 
  11.  */  
  12. public class RandomAccessFileDemo {  
  13.     public static void main(String[] args) throws FileNotFoundException {  
  14.         RandomAccessFile out = new RandomAccessFile("file/test5""rw");  
  15.         try {  
  16.             out.writeInt(1);  
  17.             out.writeDouble(3.3);  
  18.             out.writeChar('a');  
  19.             out.writeUTF("hello,java!");  
  20.             out.close();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.         RandomAccessFile in = new RandomAccessFile("file/test5""r");  
  25.         try {  
  26.             in.seek(4);  
  27.             System.out.println(in.readDouble());  
  28.             in.seek(4+8+2);  
  29.             System.out.println(in.readUTF());  
  30.             in.close();  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35. }  


 

[java]   view plain copy
    1. package test;  
    2.   
    3. import java.io.FileInputStream;  
    4. import java.io.FileNotFoundException;  
    5. import java.io.FileOutputStream;  
    6. import java.io.IOException;  
    7. import java.io.ObjectInputStream;  
    8. import java.io.ObjectOutputStream;  
    9. import java.io.Serializable;  
    10.   
    11. /* 
    12.  * ObjectInputStream(ObjectOutputStream)用于对象的序列化 
    13.  * 直接对一个对象进行读写,该对象须实现Serializable 
    14.  */  
    15. public class ObjectInputStreamDemo {  
    16.     public static void writeObject(String fileName, Object o, boolean isAppend)  
    17.             throws FileNotFoundException, IOException {  
    18.         ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(  
    19.                 fileName, true));  
    20.         out.writeObject(o);  
    21.         out.close();  
    22.     }  
    23.   
    24.     public static Object readObject(String fileName)  
    25.             throws FileNotFoundException, IOException, ClassNotFoundException {  
    26.         ObjectInputStream in = new ObjectInputStream(new FileInputStream(  
    27.                 fileName));  
    28.         Object o = in.readObject();  
    29.         in.close();  
    30.         return o;  
    31.     }  
    32.   
    33.     public static void main(String[] args) {  
    34.         try {  
    35.             ObjectInputStreamDemo.writeObject("file/object"new Person(),  
    36.                     false);  
    37.             ((Person) ObjectInputStreamDemo.readObject("file/object"))  
    38.                     .display();  
    39.         } catch (IOException e) {  
    40.             e.printStackTrace();  
    41.         } catch (Exception e) {  
    42.             e.printStackTrace();  
    43.         }  
    44.     }  
    45.   
    46. }  
    47.   
    48. class Person implements Serializable {  
    49.     private String name = "刘海房liuhaifang";  
    50.     private int sex = 0;  
    51.   
    52.     Person(String name, int sex) {  
    53.         this.name = name;  
    54.         this.sex = sex;  
    55.     }  
    56.   
    57.     Person() {  
    58.     }  
    59.   
    60.     void display() {  
    61.         System.out.println("my name is :" + name);  
    62.         String s = (sex == 0) ? "男" : "女";  
    63.         System.out.println(s);  
    64.     }  
    65. }  

转载于:https://www.cnblogs.com/kinghitomi/archive/2012/01/19/2327390.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值