java io流操作_【Java基础】IO流操作
一、IO流概念: 輸入輸出流,也就是可以用來讀寫數據,以及上傳下載數據。
二、分類:
1、從流的對象來分: ? 1)高端流:所有程序或者內存中的流都稱為高端流。
2)低端流:所有外界設備中的流都是低端流。
如何區分到底是高端流還是低端流:
一般來說流的對象的后綴包含reader或者writer一般都是高端流,否則是低端流。(除了PrintStream,PrintStream也是高端流)
2、從數據的流向來分: ? 1)輸入流:從外界設備-->程序,也就是讀數據的動作。
2)輸出流:從程序-->外界設備,也就是寫數據的動作。
3、從數據的格式來分: ? 1)字節流:是用來處理聲音或者圖片等等二進制信息的流。
2)字符流:用來處理字符數據的流。
4、從流的對象是否需要包裝來分: ? 1)原始流:流在實例化過程中,不需要通過另外一個流來包裝自己的流。
2)包裝流:流在實例化過程中,需要通過另外一個流來包裝自己的流。
原始流都是低端流,包裝流都是高端流。
三、常用IO流:
1、文件操作
字節流:
1)FileOutputStream
2)FileInputStream
字符流:
3)FileWriter
4)FileReader
區別:
(1)字節流的操作是直接與文件本身關聯,不使用緩沖區;
(2)字符流的操作是通過緩沖區與文件關聯。
一般都使用字節流,中文操作采用字符流。
2、內存操作流(多用于Java web)
5)ByteArrayOutputStream 內存向程序輸出
6)ByteArrayInputStream?? 程序向內存輸入
package io.demo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class ByteArrayDemo {
public static void main(String[] args) {
String str = "Hello World";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes()); // 內存輸入流,將str輸入保存在內存中
ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 內存輸出流,內容輸出
int temp = 0;
while ((temp = bis.read()) != -1) {
bos.write((char) temp);
}
System.out.println(bos.toString());// bos.toString()取出內存輸出內容
}
}
3、BufferReader:緩沖區讀取
package io.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class BufferReaderIODemo {
public static void main(String[] args) {
//輸出c:\demo.txt文件的內容
File file = new File("C:" + File.separator + "demo.txt");
if (file.exists())
try {
InputStreamReader isr = new InputStreamReader(
new FileInputStream(file));
BufferedReader buf = new BufferedReader(isr);
while (true ) {
String str=buf.readLine();
if(null ==str){
break;
}
System. out.println(str);
}
buf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、java提供兩個類用于字節-字符流的轉換
7)InputStreamReader:將字節的輸入轉換為字符流
8)OutputStreamWriter:將字符的輸出流轉換為字節流的輸出
5、對象序列化:Serializable
9)ObjectOutputStream:對象序列化
10)ObjectInputStream:對象反序列化
首先需要實現序列化的對象必須實現 java.io.Serializable接口。
package io.demo;
import java.io.Serializable;
//Person類要實現 Serializable接口
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
public Person(String name, int age) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return this .name + ":" + this.age ;
}
private String name;
private int age ;
}
package io.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjIODemo {
public static void main(String[] args) throws ClassNotFoundException {
File file = new File("c:" + File.separator + "demo.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 輸出流,以對象的形式寫入文件c:\demo.txt
ObjectOutputStream objo = null;
try {
objo = new ObjectOutputStream(new FileOutputStream(file));
objo.writeObject( new Person("諸葛亮" , 22));
objo.writeObject( new Person("魯樹" , 23));
objo.writeObject( new Person("孔明" , 25));
objo.writeObject( new Person("valiate" , 26));
objo.close();
} catch (Exception e) {
e.printStackTrace();
}
// 從c:\demo.txt以對象的形式讀出
ObjectInputStream obji = null;
try {
obji = new ObjectInputStream(new FileInputStream(file));
while (true ) {
Person per = (Person) obji.readObject();
if (null == per)
break;
System. out.print(per + " " );
per = (Person) obji.readObject();
}
obji.close();
} catch (Exception e) {
// 讀到文件結束符EOF會拋出EOFException異常,屏蔽異常信息輸出
// e.printStackTrace();
}
}
}
//諸葛亮:22 魯樹:23 孔明:25 valiate:26
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java io流操作_【Java基础】IO流操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android+5.q,MSM8909+
- 下一篇: Java8 Optional类