java的IO類操做主要包括以下幾類java
一、File類的使用。數組
二、字節操做流:OutputStream、InputStream緩存
三、字符操做流:Reader、Writer函數
四、對象序列化:serializablespa
(1)File類操作系統
Java代碼.net
[java] view plain copy print?orm
public class File extends Object implements Serizliable Comparable<File> 對象
從定義看,File類是Object的直接子類,同時它繼承了Comparable接口能夠進行數組的排序。blog
File類的操做包括文件的建立、刪除、重命名、獲得路徑、建立時間等,如下是文件操做經常使用的函數。
File類的操做:
(1)建立文件,注意File.separator能夠解決跨操做系統的問題。
下面的例子是一建立一個文件,若是該文件存在則刪除,不然建立該文件。
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "test.txt");
if (file.exists()) {
file.delete();
} else {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
(2)文件的類型函數
file.isFile(); //判斷是否是文件
file.isDirectory();//判斷是否是目錄
(3)列出目錄的內容
pulbic String[] list();//列出全部文件名和目錄名
public File[] listFiles();//列出全部文件和目錄
(2)字節操做流(btyle)
(1)字節輸出流OutputStream
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "test.txt");//指定要操做的文件
OutputStream out=null;//定義字節流輸出對象
try {
//out= new FileOutputStream(file,true);//是否字節追加函數
out= new FileOutputStream(file);//獲取實際的字節流輸出對象,內容覆蓋
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String info="hello";//要輸入的內容
byte[] b=info.getBytes();//將字符轉化爲字節數組
try {
out.write(b);
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)字節輸入流InputStream
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "test.txt");//指定要操做的文件
InputStream In=null;//定義字節流輸入對象
try {
//out= new FileOutputStream(file,true);//是否字節追加函數
In= new FileInputStream(file);//獲取實際的字節流輸入對象
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int len=0;//輸入數組長度
byte[] b=new byte[1024];//開闢空間,讀取內容
//byte[] b=new byte[(int)file.length()];//根據文件大小開闢空間
try {
len=In.read(b);//讀取
} catch (IOException e1) {
e1.printStackTrace();
}
try {
In.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(new String(b,0,len));
}
}
(3)字符輸出流Write
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "test.txt");// 指定要操做的文件
Writer write = null;// 定義字符輸出流
try {
write = new FileWriter(file);
} catch (IOException e) {
e.printStackTrace();
}
String infor = "hello,heiehiehieh";
try {
write.write(infor);
} catch (IOException e) {
e.printStackTrace();
}
try {
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(4)字符輸入流Reader
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "test.txt");// 指定要操做的文件
Reader read = null;// 定義字符輸入流
try {
read = new FileReader(file);
} catch (IOException e) {
e.printStackTrace();
}
String infor = "hello,heiehiehieh";
char[] b=new char[1024];//設置字符的長度
try {
int len=read.read(b);
} catch (IOException e) {
e.printStackTrace();
}
try {
read.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(5)字節流和字符流的區別(重點)
字節流沒有緩衝區,是直接輸出的,而字符流是輸出到緩衝區的。所以在輸出時,字節流不調用colse()方法時,信息已經輸出了,而字符流只有在調用close()方法關閉緩衝區時,信息才輸出。要想字符流在未關閉時輸出信息,則須要手動調用flush()方法。
(6)轉換流:在io中還存在一類是轉換流,將字節流轉換爲字符流,同時能夠將字符流轉化爲字節流。
OutputStreamWriter(OutStream out):j將字節流以字符流輸出。
InputStreamReader(InputStream in):將字節流以字符流輸入。
(7)打印流 PrintStream
在操做中要求輸出信息時,能夠採用PrintStream進行輸出,它包括PrintWrite和PrintReader
(3)對象序列化
對象序列化是指將一個對象能夠轉化爲二進制的byte流,能夠以文件的方式進行保存。
將對象保存在文件的操做叫作對象的序列化操做。
將對象從文件中恢復的操做叫作反序列化操做。
一個對象若是要能序列化,它必須繼承Serizliable。在實現序列化是則須要ObjectOurputStream完成,而須要反序列化時則採用ObjectInputStream。
transient關鍵字:變量聲明爲Transient後,該變量不可序列化。
(4)內存流
在項目的開發過程當中,有時但願只產生臨時文件,將信息輸出的內存中,此時會用到內存流,內存流基本方法以下:
Java代碼
public class FileDemo1 {
public static void main(String[] args) {
String infor = "hello";
// 全部的內容向內存中輸入
InputStream input = new ByteArrayInputStream(infor.getBytes());
// 全部內存的內容由outputStream輸出
OutputStream out = new ByteArrayOutputStream();
int temp = 0;
try {
while ((temp = input.read()) != -1) {
char c = Character.toUpperCase((char) temp);
out.write(c);//從內存中輸出,全部的內容都保存在ByteArrayOutputStream中
}
} catch (IOException e) {
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(out.toString());
}
}
(5)System類對IO的支持
(6)緩存讀取