java檔案輸入輸出流的例子
阿新 • • 發佈:2019-01-11
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class InputStreamDemo { public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream("PotPlayerSetup64.exe"); FileOutputStream fos = new FileOutputStream("b.exe"); // int data; // 按單個位元組讀,這種方法反覆的要操作磁碟讀寫操作,因此很慢 // while ((data = fis.read()) != -1) { // fos.write(data); // } // System.out.println("copy finished"); // 這種方法是一次就讀滿一個byte陣列,然後寫入,這樣將byte陣列設定大一點就可以 // 減少讀取寫入的次數 // byte[] bs = new byte[1024 * 1024]; // int len = -1; // while ((len = fis.read(bs)) != -1) { // fos.write(bs, 0, len); // } // System.out.println("copy finished"); // 使用bufferedinputstream把fis裝進去,這樣也能減小磁碟的讀寫操作次數 // 原理是bis內部會有一個緩衝區,緩衝區的大小為8192個位元組,當對bis讀取時, // 首先bis從磁盤獲取8192個位元組的內容,然後再將讀取的位元組返回給bis.read // 這種方法相比於fis.read(byte)來說,當byte陣列比較大時,fis.read(byte) // 會快,因為buffered的讀寫是要操作兩個陣列,讀一個緩衝區,寫也有一個緩衝區 // 而fis.read(byte)只對一個數組進行操作 BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); int b; while ((b = bis.read()) != -1) { bos.write(b); } System.out.println("copy finished"); bis.close(); bos.close(); fis.close(); fos.close(); } }
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderDemo { static String read(String filename) throws IOException { // FileReader繼承了Reader這個類,這個類用於字元流,再在外面加一個 // BufferedReader,其實也是取到一個起到一個緩衝的作用 BufferedReader bReader = new BufferedReader((new FileReader(filename))); String s = null; StringBuilder sb = new StringBuilder(); while ((s = bReader.readLine()) != null) { sb.append(s + '\n'); } bReader.close(); return sb.toString(); } public static void main(String[] args) throws IOException { System.out.println(read("inputfile.txt")); } }