java:io的基本實例
阿新 • • 發佈:2018-02-11
target close package fileread 取數 mem nload 方法 ace
一,io的常用類:
1,File類
2,OutputStream 字節輸出流
3,InputStream 字節輸入流
4,Writer 字符輸出流
5,Reader 字符輸入流
package io; import java.io.*; /* 字節流 在JAVA中所有的輸入流的父類為: java.io.InputStream,此類是一個抽象類 一、java.io.FileInputSteram 此類為文件輸入流。 read方法的作用 從流(數據來源)中一次返回一個數據字節。如果文件中沒有數據字節則會返回-1 available方法作用 返回當前流有多少個字節可以讀。 skip(long) 跳過指定的指節數。 二、java.io.FileOutputStream 在JAVA中所有的輸出流的父類為: java.io.OutputStream,此類是一個抽象類 三、BufferedInputStream BufferedOutputStream 字節緩沖輸入輸出流,通過read(byte[]) 與write(byte[])實現,主要用於 在讀取數據字節的時候記錄字節數。 註: 以上的流都屬於字節流,字節流特點是一次讀取一個字節,可以用它來讀取任何文件內容。 字符流 由於字節流一次讀取一個字節,因此在讀取一些文本內容的時候,效率會比較低, 因此JDK提供了字符流來讀取字符類文件(一次讀取二個字節)。 註:字符流也是由字節流來實現,字符流只能讀取字符類文件。 一、java.io.Reader(抽象類) 所有字符輸入流的父類 二、java.io.Writer(抽象類) 所有字符輸出流的父類。 三、java.io.FileReader 文件輸入字符流 四、java.io.FileWrite 文件字符輸出流 如果出現字符編碼不一至造成的亂碼可以使用 InputStreamReader與 OutputStreamWrite*/ /** * io字節流和字符流的傳遞方式 * @author dyb * */ public class IoDemoTree { public static void main(String[] args) { } /*java本身沒有IO的讀寫功能,它是借助平臺(window)自身的讀寫功能來實現,每調用 一次read方法與write方法都需要與平臺建立一次連接(耗費一定的時間),因此正確的 操作應該是在建立一次連接後讀取盡量多的字節數。 read(byte[]) 與write(byte[]) 適合不記錄讀取字節數的情況下一次性讀完所有文件內容。*/ /** * 一次性讀完整個文件,使用下列方法。 * @throws IOException */ public void rw() throws IOException { FileInputStream in = new FileInputStream("src/start.mp3"); FileOutputStream out = new FileOutputStream("src/start_2.mp3"); long s=System.currentTimeMillis();//獲取文件傳輸開始的的時間 byte[] by=new byte[8194]; int len = 0; while((len=in.read(by))!=-1){ out.write(by,0,len); } in.close();out.close(); long e=System.currentTimeMillis(); System.out.println(e-s); } /** * 需要讀取記錄字節數使得下列方法。 * @param aa * @throws IOException */ public void rw(int aa) throws IOException { FileInputStream in = new FileInputStream("src/start.mp3"); FileOutputStream out = new FileOutputStream("src/start_2.mp3"); BufferedInputStream bin=new BufferedInputStream(in); BufferedOutputStream bout=new BufferedOutputStream(out); long s=System.currentTimeMillis(); int a = 0; while((a=bin.read())!=-1){ bout.write(a); } bin.close();bout.close(); long e=System.currentTimeMillis(); System.out.println(e-s); } /** * 需要讀取字符類文件並且可以修改字符編碼,使用下面方法 * @param aa * @throws IOException */ public void rw(byte aa) throws IOException{ InputStreamReader iObj=new InputStreamReader (new FileInputStream("src/action/說明.txt"),"GBK"); OutputStreamWriter oObj=new OutputStreamWriter (new FileOutputStream("src/action/說明2.txt"),"UTF-8"); char[] by=new char[8888]; int len=iObj.read(by); while(len!=-1){ oObj.write(by,0,len); len=iObj.read(by); } iObj.close(); oObj.close(); } }
例二:
復制文件夾下所有的文件
package io; import java.io.*; /** * 使用File復制文件和目錄 * @author dyb * */ public class IoDemoTwo { public static void main(String[] args) throws IOException { /*st.copy("E:\\360SoftMgrGame","E:\\360downloads/aaa");*/ IoDemoTwo obj=new IoDemoTwo(); File src=new File("E:/360SoftMgrGame"); File target=new File("E:/360downloads"); if(!target.exists()) target.mkdirs(); obj.copy(src, target); } /* * 遞歸復制下一級目錄 */ public void copy(File src,File target){ File[] fs=src.listFiles(); for(int i=0;i<fs.length;i++){ String name=fs[i].getName(); File newF=new File(target,name); if(fs[i].isDirectory()){ newF.mkdirs(); copy(fs[i],newF); }else{ rw(fs[i], newF); } } } /** * 復制文件 */ public void rw(File src,File target){ try { FileInputStream in = new FileInputStream(src); FileOutputStream out = new FileOutputStream(target); byte[] by = new byte[8194]; int len = 0; while ((len = in.read(by)) != -1) { out.write(by, 0, len); } in.close(); out.close(); }catch (IOException e){ e.printStackTrace();; } } }
java:io的基本實例