更新時間:2015年12月29日13時23分 來源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):
/** * 使用IO讀取指定文件的前1024個字節(jié)的內(nèi)容 * @param file 指定文件名稱 * @throws java.io.IOException IO異常 */ public void ioRead(String file) throws IOException { FileInputStream in = new FileInputStream(file); byte[] b = new byte[1024]; in.read( b ); System.out.println(new String(b)); } /** * 使用NIO讀取指定文件的前1024個字節(jié)的內(nèi)容 * @param file 指定文件名稱 * @throws java.io.IOException IO異常 */ public void nioRead(Stirng file) thorws IOException { FileInputStream in = new FileInputStream(file); FileChannel channel = in.getChanel(); ByteBuffer buffer = ByteBuffer.allocate(1024); channel.read( buffer ); byte[] b = buffer.array(); System.out.println( new String( b )); } |
// 第一步是獲取通道。我們從 FileInputStream 獲取通道: FileInputStream fin = new FileInputStream( "readandshow.txt" ); FileChannel fc = fin.getChannel(); // 下一步是創(chuàng)建緩沖區(qū): ByteBuffer buffer = ByteBuffer.allocate( 1024 ); // 最后,需要將數(shù)據(jù)從通道讀到緩沖區(qū)中: fc.read( buffer ); |
// 首先從 FileOutputStream 獲取一個通道: FileOutputStream fout = new FileOutputStream( "writesomebytes.txt" ); FileChannel fc = fout.getChannel(); // 下一步是創(chuàng)建一個緩沖區(qū)并在其中放入一些數(shù)據(jù),這里,用data來表示一個持有數(shù)據(jù)的數(shù)組。 ByteBuffer buffer = ByteBuffer.allocate( 1024 ); for (int i=0; i<data.length; ++i) { buffer.put( data[i] ); } buffer.flip(); // 最后一步是寫入緩沖區(qū)中: fc.write( buffer ); |
/** * 將一個文件的所有內(nèi)容拷貝到另一個文件中。 * 執(zhí)行三個基本操作: * 首先創(chuàng)建一個 Buffer * 然后從源文件中將數(shù)據(jù)讀到這個緩沖區(qū)中 * 最后將緩沖區(qū)寫入目標文件 * 程序不斷重復(fù)(讀、寫、讀、寫) 直到源文件結(jié)束 */ public static void main(String[] args) throws Exception { String infile = "C:\\copy.sql";String outfile = "C:\\copy.txt"; // 獲取源文件和目標文件的輸入輸出流 FileInputStream fin = new FileInputStream(infile); FileOutputStream fout = new FileOutputStream(outfile); // 獲取輸入輸出通道 FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); // 創(chuàng)建緩沖區(qū) ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { // clear方法,重設(shè)緩沖區(qū),使它可以接受讀入的數(shù)據(jù) buffer.clear(); // 從輸入通道中將數(shù)據(jù)讀到緩沖區(qū) int r = fcin.read(buffer); // read方法,返回讀取的字節(jié)數(shù),可能為零,如果該通道已到達流的末尾則返回-1 if (r == -1) { break; } // flip方法,讓緩沖區(qū)可以將新讀入的數(shù)據(jù),寫入到另一個通道中 buffer.flip(); // 從輸出通道中將數(shù)據(jù)寫入緩沖區(qū) fcout.write(buffer); } } |