Java I/O系統的類實在是太多了
數據流是指所有的數據通信通道
有兩類流
InputStream 用於read
這兩個都是抽象類
read() 從流中讀入數據 有
int read() 一次讀一個字節
int read(byte[]) 讀多個字節到數組中
int read(byte[]
skip() 跳過流中若干字節
available() 返回流中可用字節數
markSupported() 判斷是否支持標記與復位操作
mark() 在流中標記一個位置
reset() 返回標記過的位置
close() 關閉流
write(int) 寫一個字節到流中
write(byte[]) 將數組中的內容寫到流中
write(byte[]
close() 關閉流
flush() 將緩沖區中的數據強制輸出
File 可以表示文件也可以表示目錄
構造器
File(File parent
File(String pathname) 用絕對路徑構造
File(String parent
File(URI uri) 用遠程文件構造
常用方法
boolean createNewFile();
boolean exists();
例子
//建立 test
import java
public class CreateNewFile{
public static void main(String args[]){
File f=new File(
try{
if(!f
f
else
System
}catch(Exception e){
e
}
}
}
boolean mkdir()/mkdirs()
boolean renameTo(File destination)
例子
import java
public class CreateDir{
public static void main(String args[]){
File f=new File(
File f
File f
File f
try{
f
f
f
}catch(Exception e){
e
}
}
}
String getPath()/getAbsolutePath()
String getParent()/getName()
例子
import java
public class Test{
public static void main(String args[]){
File f=new File(
File f
try{
System
System
System
System
}catch(Exception e){
e
}
}
}
String list[] //顯示目錄下所有文件
long lastModified() //返回
boolean isDirectory()
例子
import java
import java
public class Dir{
public static void main(String args[]){
File f=new File(
String[] listAll=null;
File temp=null;
try{
listAll=f
for(int i=
temp=new File(listAll<i>);
System
if(temp
System
else
System
System
}
}catch(Exception e){
e
}
}
}
File f=new File(
FileInputStream in=new FileInputStream(f);
FileOutputStream out=new FileOutputStream(f);
例子
import java
public class Copy{
public static void main(String args[]){
FileInputStream fis=null;
FileOutputStream fos=null;
try{
fis=new FileInputStream(
fos=new FileOutputStream(
int c;
while((c=fis
fos
}catch(Exception e){
e
}finally{
if(fis != null) try{ fis
if(fos!= null) try{ fos
}
}
}
BufferedInputStream
BufferedOutputStream
他們是在普通文件流上加了緩沖的功能
例子
import java
public class Copy{
public static void main(String args[]){
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
byte buf[]=new byte[
try{
bis=new BufferedInputStream(new FileInputStream(
bos=new BufferedOutputStream(new FileOutputStream(
int len=
while( true ){
len=bis
if(len<=
bos
}
bos
}catch(Exception e){
e
}finally{
if(bis != null) try{ bis
if(bos!= null) try{ bos
}
}
}
DataInputStream
DataOutputStream
他們是在普通流上加了讀寫原始型數據的功能
方法
readBoolean()/writeBoolean()
readByte()/writeByte()
readChar()/writeByte()
例子
import java
public class DataOut{
public static void main(String args[]){
DataOutputStream dos=null;
try{
dos=new DataOutputStream(new FileOutputStream(
dos
dos
dos
dos
}catch(Exception e){
e
}finally{
if(dos!=null)
try{
dos
}catch(Exception e){
}
}
}
}
import java
public class DataIn{
public static void main(String args[]){
DataInputStream dis=null;
try{
dis=new DataInputStream(new FileInputStream(
System
System
System
System
}catch(Exception e){
e
}finally{
if(dis!=null)
try{
dis
}catch(Exception e){
}
}
}
}
串行化
對象流
將串行化的對象通過對象流寫入文件或傳送到其他地方
對象流是在普通流上加了傳輸對象的功能
注意
例子
import java
class Student implements Serializable{
private String name;
private int age;
public Student(String name
this
this
}
public void greeting(){
System
}
public String toString(){
return
}
}
public class ObjectOutTest{
public static void main(String args[]){
ObjectOutputStream oos=null;
try{
oos=new ObjectOutputStream(
new FileOutputStream(
Student s
Student s
oos
oos
}catch(Exception e){
e
}finally{
if(oos!=null)
try{
oos
}catch(Exception e){
e
}
}
}
}
import java
public class ObjectInTest{
public static void main(String args[]){
ObjectInputStream ois=null;
Student s=null;
try{
ois=new ObjectInputStream(
new FileInputStream(
System
s=(Student)ois
System
s
System
s=(Student)ois
System
s
}catch(Exception e){
e
}finally{
if(ois!=null)
try{
ois
}catch(Exception e){
e
}
}
}
}
上面的幾種流的單位是 byte
Java采用 Unicode 字符集
InputStreamReader 是 字節流 到 字符橋的橋梁 ( byte
OutputStreamWriter是 字符流 到 字節流的橋梁 ( char
他們是在字節流的基礎上加了橋梁作用
我們常用的是:
BufferedReader 方法
PrintWriter 方法
例子
import java
public class PrintWriterTest{
public static void main(String args[]){
PrintWriter pw=null;
try{
pw=new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(
pw
}catch(Exception e){
e
}finally{
if(pw!=null)
try{
pw
}catch(Exception e){
e
}
}
}
}
import java
public class BufferedReaderTest{
public static void main(String args[]){
BufferedReader br=null;
try{
br=new BufferedReader(
new InputStreamReader(
new FileInputStream(
System
}catch(Exception e){
e
}finally{
if(br!=null)
try{
br
}catch(Exception e){
e
}
}
}
}
可同時完成讀寫操作
支持隨機文件操作的方法:
readXXX()/writeXXX()
seek() 將指針調到所需位置
getFilePointer() 返回指針當前位置
length() 返回文件長度
例子
import java
public class RandomFile{
public static void main(String args[]){
RandomAccessFile raf=null;
int data[]={
try{
raf=new RandomAccessFile(
for(int i=
raf
for(int i=data
raf
System
}
}catch(Exception e){
e
}finally{
if(raf!=null)
try{
raf
}catch(Exception e){
e
}
}
}
}
這部分的難點就是類比較復雜
a
InputStream
|
|
|
|
OutputStream 同上圖
BufferedInputStream DataInputStream ObjectInputStream 只是在 FileInputStream 上增添了相應的功能
b
Reader
|
|
Writer
|
|
|
c
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26725.html