二进制I/O类
FileInputStream类和FileOutputStream类
*FileOutputStream(file: File)
*FileOutputStream(filename: String)
*FileOutputStream(file: File, append: boolean)
*FileOutputStream(filename: String, append: boolean)
如果文件不存在,则会创建一个新文件。
如果这个文件已经存在,前两个构造方法将会删除文件的当前内容。
若要在已存在的文件上进行修改,则将最后两个构造方法中的参数append设置为true
1 public class TestFileStream { 2 public static void main(String[] args) throws java.io.IOException{ 3 java.io.OutputStream output = new java.io.FileOutputStream("temp.dat"); 4 5 for(int i = 97; i <= 122; i++) 6 output.write(i); 7 output.close(); 8 9 java.io.InputStream input = new java.io.FileInputStream("temp.dat"); 10 11 int value; 12 //从input.read()中读取一个字节,然后将它赋值给value,并且检验它是否为-1。输入值为-1意味着文件的结束。 13 while((value = input.read()) != -1) 14 System.out.println(value); 15 16 //不关闭流可能会在输出文件中造成数据受损,或导致其他的程序设计错误。 17 input.close(); 18 } 19 }
DataInputStream类和DataOutputStream类
DataInputStream从数据流读取字节,并且将它们转换为正确的基本类型值或字符串值。
DataOutputStream将基本类型的值或字符串转换为字节,并且将字节输出到数据流。
1 import java.io.RandomAccessFile; 2 3 public class TestDataStream { 4 public static void main(String[] args) throws java.io.FileNotFoundException,java.io.IOException{ 5 java.io.DataOutputStream dos = new java.io.DataOutputStream(new java.io.FileOutputStream("temp.dat")); 6 dos.writeUTF("BinZheng"); 7 dos.writeDouble(95.5); 8 dos.close(); 9 10 java.io.DataInputStream dis = new java.io.DataInputStream(new java.io.FileInputStream("temp.dat")); 11 System.out.println("姓名:"+dis.readUTF()+"-"+"分数:"+dis.readDouble()); 12 dis.close(); 13 14 RandomAccessFile raf = new RandomAccessFile("1234.txt", "rw"); 15 raf.write(51); 16 raf.close(); 17 } 18 }
BufferedInputStream类和BufferedOutputStream类
可以通过减少读写次数来提高输入和输出的速度。
其为存储字节在流中添加一个缓冲区,以提高处理效率。
如果没有指定缓冲区大小,默认的大小是521个字节。缓冲区输入流会在每次读取调用中尽可能多地将数据读入缓冲区。相反地,只有当缓冲区已满或调用flsh()方法时,缓冲输出流才会调用写入方法。
对象的输入/输出
ObjectInputStream类和ObjectOutputStream类除了可以实现基本数据类型与字符串的输入和输出之外,还可以实现对象的输入和输出。所以完全可以用ObjectInputStream类和ObjectOutputStream类代替DataInputStream类和DataInputStream类。
1 public class TestObjectOutputStream { 2 public static void main(String[] args) throws java.io.IOException,ClassNotFoundException{ 3 java.io.ObjectOutputStream output = new java.io.ObjectOutputStream(new java.io.FileOutputStream("object.dat")); 4 //若要提高程序的性能,可以使用下面的语句代替上一行 5 //java.io.ObjectOutputStream output1 = new java.io.ObjectOutputStream(new java.io.BufferedOutputStream(new java.io.FileOutputStream("object.dat"))); 6 output.writeUTF("BinZheng"); 7 output.writeDouble(95.5); 8 output.writeObject(new java.util.Date()); 9 output.close(); 10 11 java.io.ObjectInputStream input = new java.io.ObjectInputStream(new java.io.FileInputStream("object.dat")); 12 System.out.println(input.readUTF()+" - "+ 13 input.readDouble()+" - "+ 14 input.readObject()); 15 input.close(); 16 } 17 }
序列化数组
只有数组中的元素都是可序列化的,这个数组才是可序列化的。
1 public class TestObjectStreamForArray { 2 public static void main(String[] args) throws java.io.FileNotFoundException, java.io.IOException, ClassNotFoundException { 3 int[] numbers = {1,2,3,4,5}; 4 String[] strings = {"zhengbin","zhengjia","cuimin"}; 5 //若不存在这个文件,则会创建一个新文件。 6 java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(new java.io.FileOutputStream("array.dat",true)); 7 oos.writeObject(numbers); 8 oos.writeObject(strings); 9 oos.close(); 10 11 java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new java.io.FileInputStream("array.dat")); 12 int[] numbers1 = (int[])(ois.readObject()); 13 String[] strings1 = (String[])(ois.readObject()); 14 ois.close(); 15 16 for(int i = 0;i < numbers1.length;i++){ 17 System.out.print(numbers1[i]); 18 } 19 System.out.println(); 20 for(int i = 0;i < strings1.length;i++){ 21 System.out.print(strings1[i]); 22 } 23 } 24 }
随机访问文件
之前所用的所有数据流都是只读的或只写的。这些数据流的外部文件都是顺序文件,如果不创建新文件就不能更新它们。
RandomAccessFile类实现了DataInput和DataOutput接口。
当创建一个RandomAccessFile数据流时,可以指定两种模式(“r”或“rw”)之一。
模式“r”表明这个数据流是只读的,模式“rw”表明这个数据流即允许读也允许写。
唉,没啥意思,暂时不深究了
文件导航和I/O
创建目录:
1 import java.io.File; 2 public class CreateDir { 3 public static void main(String args[]) { 4 String dirname = "/tmp/user/java/bin"; 5 File d = new File(dirname); 6 // Create directory now. 7 d.mkdirs(); 8 } 9 }
目录列表:
1 import java.io.File; 2 public class ReadDir { 3 public static void main(String[] args) { 4 5 File file = null; 6 String[] paths; 7 8 try{ 9 // create new file object 10 file = new File("/tmp"); 11 12 // array of files and directory 13 paths = file.list(); 14 15 // for each name in the path array 16 for(String path:paths) 17 { 18 // prints filename and directory name 19 System.out.println(path); 20 } 21 }catch(Exception e){ 22 // if any error occurs 23 e.printStackTrace(); 24 } 25 } 26 }
相关博客: