一、檔案 輸入輸出流 :FileInputStream 與 FileOutputStream
1、FileInputStream、FileOutputStream 顧名思義 屬于檔案流,用于 檔案流操作。繼承 InputSream,outputSream,屬于InputSream,outputSream
2、用法
//讀取一個字元
// FileInputStream fileInputStream = new FileInputStream(file);
// char byteChar = (char) fileInputStream.read();
// System.out.print(byteChar);
// fileInputStream.close();
//讀取多個字元
// FileInputStream fileInputStream2 = new FileInputStream(file);
// byte[] bytes = new byte[2];
// fileInputStream2.read(bytes);
// String testString = new String(bytes);
// System.out.print(testString);
// fileInputStream2.close();
//讀取多個字元優雅點的寫法
// FileInputStream fileInputStream3 = new FileInputStream(file);
// byte[] bytes = new byte[2];
// int readNum = -1 ;
//
// StringBuffer stringBuffer = new StringBuffer();
// while ((readNum = fileInputStream3.read(bytes))!=-1){
// stringBuffer.append(new String(bytes,0,readNum));
// }
// PrintUtils.print(stringBuffer.toString());
// fileInputStream3.close();
//如果要每次讀取一行的話,用BufferInputReader ,使用readLine()方法
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String data;
while ((data = bufferedReader.readLine())!=null){
PrintUtils.print(data+"\n");
}
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
上面是fileInputStream的一些用法,而FileOutputStream 的用法類似,如下
FileOutputStream fileOutputStream2 = new FileOutputStream(file);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream2));
writer.write(testString);
writer.flush(); //可以不用
fileOutputStream2.flush();
fileOutputStream2.close();
writer.close();
二、DataInputStream 與 DataInputStream
1、DataInputStream、DataInputStream 清單 BufferedWriter,BufferedReader, 但是屬于 InputStream、 outputSream,父類是,FilterOutputStream,我的了解,它們是InputStream、 outputSream 的裝飾,跟BufferedWriter,BufferedReader
的差別在,它提供了寫入除String,byte之外的資料類型的方法,而BufferedWriter,BufferedReader不行。
2 、用法
FileOutputStream fileOutputStream = new FileOutputStream(file);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
dataOutputStream.writeUTF("陳景坤");
dataOutputStream.writeInt(123);
byte[] b = new byte[2];
dataOutputStream.writeByte(b[0]);
dataOutputStream.writeByte(b[1]);
dataOutputStream.writeFloat(0.01f);
三、ObjectInputStream 和 ObejectOutStream
1、 DataInputStream、DataInputStream 等沒有提供寫入對象的方法,而ObjectInputStream、ObejectOutStream 更強大
,可以提供寫入對象的方法,寫入的類需要實作序列化。
2、用法
public class TestUser implements Serializable{
private static final long serialVersionUID = -695100050333685920L;
private int age ;
private int money;
private String name;
public String getName() {
return null == name ? "" : name;
}
public TestUser(String name,int age, int money) {
this.age = age;
this.money = money;
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public TestUser(int age, int money) {
this.age = age;
this.money = money;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
ObjectOutputStream測試:
File file = new File(Environment.getExternalStorageDirectory()+"/testdemo/test.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(new TestUser("陳景坤",21,1000000));
objectOutputStream.writeObject(new TestUser("陳景坤2",21,1000000));
objectOutputStream.flush();
objectOutputStream.close();
File ObjectInputStream測試:
file = new File(Environment.getExternalStorageDirectory()+"/testdemo/test.txt");
FileInputStream fileInputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
TestUser user = (TestUser) objectInputStream.readObject();
TestUser user2 = (TestUser) objectInputStream.readObject();
PrintUtils.print(user.toString());
PrintUtils.print(user2.toString());
objectInputStream.close();