標籤:file javaio
IO中主要的類和介面
File、InputStream、OutputStream、Reader、Writer、Serialzable介面
File類
File類應用的小例子
import java.io.File;import java.io.IOException;public class FileDemo { public static void main(String[] args) { //指定檔案路徑和名稱 String path = "D:"+File.separator+"1.txt"; //執行個體化檔案類 File file = new File(path); //判斷是否為路徑 System.out.println("是否為路徑:"+file.isDirectory()); //判斷檔案是否存在 if(file.exists()){ System.out.println("檔案存在!"); file.delete();//刪除檔案 }else{ System.out.println("檔案不存在,但是已經建立。。。"); try { file.createNewFile();//建立檔案,可能拋出異常 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}
列出一個指定目錄下的所有檔案夾,及檔案夾內部的檔案夾
import java.io.File;public class FileDemo2 { private static File f; private static File[] fs; public static void main(String[] args) { String path = "D:"+File.separator+"Android.7z";//指定目錄 fun(path);//列出該目錄下的所有子目錄,及子目錄內容 } public static void fun(String s){ f = new File(s);//執行個體化File類 if(f.isDirectory()){//判斷是否為路徑 fs = f.listFiles();//列出 for(File t:fs){ System.out.println(t); if(t.isDirectory()){ fun(t.toString()); } } }else{ System.out.println(f); } }}
File類只能對一個檔案本身進行操作,若想對檔案內容進行操作,需要RandomAccessFile類
RandomAccessFile
使用RandomAccessFile類進行檔案讀寫操作
import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;public class Demo2 { public static void main(String[] args) throws IOException { write("這裡示範檔案的讀寫操作","d:"+File.separator+"1.txt"); System.out.println(read("d:"+File.separator+"1.txt")); } //內容寫入檔案,會從頭開始覆蓋原始內容 public static void write(String s,String path) throws IOException{ File file = new File(path); //執行個體化RandomAccessFile執行個體,指定操作模式為“讀寫”模式,該模式下,若檔案不存在,則自動建立 RandomAccessFile rfile = new RandomAccessFile(file, "rw"); rfile.write(s.getBytes());//以位元組形式寫入 rfile.close(); } //讀出檔案內容 public static String read(String path) throws IOException{ File file = new File(path); //執行個體化RandomAccessFile執行個體,指定操作模式為“讀寫”模式,該模式下,若檔案不存在,則自動建立 RandomAccessFile rfile = new RandomAccessFile(file, "r"); int len = (int)file.length();//得到檔案的大小,以位元組形式 byte[] ss = new byte[len];//根據檔案大小聲明位元組數組大小 for(int i=0;i<len;i++){//迴圈讀取每一個位元組 ss[i]=rfile.readByte(); } rfile.close(); //調用String類的構造,產生新字串 return new String(ss); }}
位元組流和字元流
1、位元組流
OutputStream類用於位元組的輸出
InputStream類用於位元組的讀入
2、字元流
Writer類用於字元的輸出
Reader類用於字元的讀入
這裡的輸出,讀入是相對於我們大家寫的程式而言,在程式中將資料寫到程式外,叫輸出;相反,從程式外得到資料供程式使用,叫讀入;
在示範之前呢,先規範下Java中IO操作的基本步驟:
1、使用File類找到一個檔案
2、使用位元組流或字元流的子類為OutputStream、InputStream、Writer、Reader進行執行個體化
3、進行讀寫操作
4、關閉流
OutputStream
輸出資料執行個體
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { //檔案路徑,要確保改路徑存在 String path = "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt"; //使用File類找到檔案 File file = new File(path); //執行個體化OutputStream類 OutputStream out = new FileOutputStream(file,true);//加入參數true表示可以在檔案內容後追加內容 //進行輸出操作,向檔案中寫入資料時,\r\n表示換行 out.write(("\r\n"+"這是FileOutputStream示範執行個體").getBytes()); //關閉流 out.close(); }}
InputStream
讀入資料執行個體
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class FileInputStreamDemo { public static void main(String[] args) throws IOException { //檔案路徑 String path = "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt"; //執行個體化檔案 File file = new File(path); //執行個體化InputStream InputStream in = new FileInputStream(file); //讀入資料 int len = (int)file.length();//檔案所佔位元組數 byte[] bytes = new byte[len];//儲存空間 in.read(bytes);//得到資料 System.out.println(new String(bytes));//輸出 //關閉流 in.close(); }}
Writer
輸出資料執行個體
import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;public class FileWriterDemo { public static void main(String[] args) throws IOException { //檔案路徑 String path = "E:"+File.separator+"javaio"+File.separator+"FileWriter.txt"; //執行個體化檔案 File file = new File(path); //執行個體化Writer類對象 Writer writer = new FileWriter(file,true); //輸出資料 writer.write("這是FileWriter示範執行個體 "+"\r\n"); //關閉流 writer.close(); }}
Reader
讀入資料執行個體
import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.Reader;public class FileReaderDemo { public static void main(String[] args) throws IOException { // 檔案路徑 String path = "E:" + File.separator + "javaio" + File.separator+ "FileWriter.txt"; // 執行個體化檔案 File file = new File(path); //執行個體化Reader執行個體 Reader r = new FileReader(file); //讀入資料 int len = (int)file.length();//檔案大小 char[] cbuf = new char[len];//儲存空間 len = r.read(cbuf);//讀入資料,返回資料長度 System.out.println(len); System.out.println(new String(cbuf,0,len)); //關閉流 r.close(); }}
說明下OutputStream和Writer的區別:
OutputStream在操作檔案時,直接將位元組內容寫入檔案,而Writer會先把字元寫入緩衝區,然後寫入檔案,若將上面Writer的例子中的“流關閉”動作去掉,可以發現,檔案中根本不會有內容出現。實際上,電腦內部的資料存放區形式都是位元組形式的,所以個人感覺位元組流可以搞定一切資料形式。
好了,今天到這裡吧。。。
Java基礎知識之IO(1)