亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java文件讀寫IO/NIO及性能比較詳細代碼及總結

2024-07-13 10:15:24
字體:
來源:轉載
供稿:網友

干Java這么久,一直在做WEB相關的項目,一些基礎類差不多都已經忘記。經常想得撿起,但總是因為一些原因,不能如愿。

其實不是沒有時間,只是有些時候疲于總結,今得空,下定決心將丟掉的都給撿起來。

文件讀寫是一個在項目中經常遇到的工作,有些時候是因為維護,有些時候是新功能開發。我們的任務總是很重,工作節奏很快,快到我們不能停下腳步去總結。

文件讀寫有以下幾種常用的方法

1、字節讀寫(InputStream/OutputStream)

2、字符讀取(FileReader/FileWriter)

3、行讀?。˙ufferedReader/BufferedWriter)

代碼(以讀取為例):

java/191065.html">javascript/25231.html">java;">import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;/**  * <b>文件讀取類</b><br />  * 1、按字節讀取文件內容<br />  * 2、按字符讀取文件內容<br />  * 3、按行讀取文件內容<br />  * @author qin_xijuan  *  */public class FileOperate {	private static final String FILE_PATH = "d:/work/the List of Beautiful Music.txt";	/**    * 以字節為單位讀取文件內容    * @param filePath:需要讀取的文件路徑    */	public static void readFileBybyte(String filePath) {		File file = new File(filePath);		// InputStream:此抽象類是表示字節輸入流的所有類的超類。 		InputStream ins = null ;		try{			// FileInputStream:從文件系統中的某個文件中獲得輸入字節。 			ins = new FileInputStream(file);			int temp ;			// read():從輸入流中讀取數據的下一個字節。 			while((temp = ins.read())!=-1){				System.out.write(temp);			}		}		catch(Exception e){			e.getStackTrace();		}		finally{			if (ins != null){				try{					ins.close();				}				catch(IOException e){					e.getStackTrace();				}			}		}	}	/**    * 以字符為單位讀取文件內容    * @param filePath    */	public static void readFileByCharacter(String filePath){		File file = new File(filePath);		// FileReader:用來讀取字符文件的便捷類。 		FileReader reader = null;		try{			reader = new FileReader(file);			int temp ;			while((temp = reader.read()) != -1){				if (((char) temp) != '/r') {					System.out.print((char) temp);				}			}		}		catch(IOException e){			e.getStackTrace();		}		finally{			if (reader != null){				try {					reader.close();				}				catch (IOException e) {					e.printStackTrace();				}			}		}	}	/**    * 以行為單位讀取文件內容    * @param filePath    */	public static void readFileByLine(String filePath){		File file = new File(filePath);		// BufferedReader:從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。 		BufferedReader buf = null;		try{			// FileReader:用來讀取字符文件的便捷類。 			buf = new BufferedReader(new FileReader(file));			// buf = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 			String temp = null ;			while ((temp = buf.readLine()) != null ){				System.out.println(temp);			}		}		catch(Exception e){			e.getStackTrace();		}		finally{			if(buf != null){				try{					buf.close();				}				catch (IOException e) {					e.getStackTrace();				}			}		}	}	public static void main(String args[]) {		readFileBybyte(FILE_PATH);		readFileByCharacter(FILE_PATH);		readFileByLine(FILE_PATH);	}}

//-----------------------------------------------------------------分割線-----------------------------------------------------------------------------

再經過兩位同行的提點下,我對之前寫的文件做了點修改,并通過讀寫一個1.2M的文本文件來測試各方法的性能。從多次測試結果來看,行讀寫卻是是Java.nio更有效率。

經過修改之后的代碼如下:

package com.waddell.basic;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/**  * <b>文件讀取類</b><br />  * 1、按字節讀取文件內容<br />  * 2、按字符讀取文件內容<br />  * 3、按行讀取文件內容<br />  *  * @author qin_xijuan  *  */public class FileOperate {	private static final String FILE_PATH = "d:/work/jipinwodi.txt";	/**    * 以字節為單位讀寫文件內容    *    * @param filePath    *      :需要讀取的文件路徑    */	public static void readFileBybyte(String filePath) {		File file = new File(filePath);		// InputStream:此抽象類是表示字節輸入流的所有類的超類。 		InputStream ins = null;		OutputStream outs = null;		try {			// FileInputStream:從文件系統中的某個文件中獲得輸入字節。 			ins = new FileInputStream(file);			outs = new FileOutputStream("d:/work/readFileByByte.txt");			int temp;			// read():從輸入流中讀取數據的下一個字節。 			while ((temp = ins.read()) != -1) {				outs.write(temp);			}		}		catch (Exception e) {			e.getStackTrace();		}		finally {			if (ins != null && outs != null) {				try {					outs.close();					ins.close();				}				catch (IOException e) {					e.getStackTrace();				}			}		}	}	/**    * 以字符為單位讀寫文件內容    *    * @param filePath    */	public static void readFileByCharacter(String filePath) {		File file = new File(filePath);		// FileReader:用來讀取字符文件的便捷類。 		FileReader reader = null;		FileWriter writer = null;		try {			reader = new FileReader(file);			writer = new FileWriter("d:/work/readFileByCharacter.txt");			int temp;			while ((temp = reader.read()) != -1) {				writer.write((char)temp);			}		}		catch (IOException e) {			e.getStackTrace();		}		finally {			if (reader != null && writer != null) {				try {					reader.close();					writer.close();				}				catch (IOException e) {					e.printStackTrace();				}			}		}	}	/**    * 以行為單位讀寫文件內容    *    * @param filePath    */	public static void readFileByLine(String filePath) {		File file = new File(filePath);		// BufferedReader:從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。 		BufferedReader bufReader = null;		BufferedWriter bufWriter = null;		try {			// FileReader:用來讀取字符文件的便捷類。 			bufReader = new BufferedReader(new FileReader(file));			bufWriter = new BufferedWriter(new FileWriter("d:/work/readFileByLine.txt"));			// buf = new BufferedReader(new InputStreamReader(new 			// FileInputStream(file))); 			String temp = null;			while ((temp = bufReader.readLine()) != null) {				bufWriter.write(temp+"/n");			}		}		catch (Exception e) {			e.getStackTrace();		}		finally {			if (bufReader != null && bufWriter != null) {				try {					bufReader.close();					bufWriter.close();				}				catch (IOException e) {					e.getStackTrace();				}			}		}	}	/**    * 使用Java.nio ByteBuffer字節將一個文件輸出至另一文件    *    * @param filePath    */	public static void readFileByBybeBuffer(String filePath) {		FileInputStream in = null;		FileOutputStream out = null;		try {			// 獲取源文件和目標文件的輸入輸出流  			in = new FileInputStream(filePath);			out = new FileOutputStream("d:/work/readFileByBybeBuffer.txt");			// 獲取輸入輸出通道 			FileChannel fcIn = in.getChannel();			FileChannel fcOut = out.getChannel();			ByteBuffer buffer = ByteBuffer.allocate(1024);			while (true) {				// clear方法重設緩沖區,使它可以接受讀入的數據 				buffer.clear();				// 從輸入通道中將數據讀到緩沖區 				int r = fcIn.read(buffer);				if (r == -1) {					break;				}				// flip方法讓緩沖區可以將新讀入的數據寫入另一個通道  				buffer.flip();				fcOut.write(buffer);			}		}		catch (Exception e) {			e.printStackTrace();		}		finally {			if (in != null && out != null) {				try {					in.close();					out.close();				}				catch (IOException e) {					e.printStackTrace();				}			}		}	}	public static long getTime(){		return System.currentTimeMillis();	}	public static void main(String args[]) {		long time1 = getTime() ;		// readFileByByte(FILE_PATH);// 8734,8281,8000,7781,8047 		// readFileByCharacter(FILE_PATH);// 734, 437, 437, 438, 422 		// readFileByLine(FILE_PATH);// 110, 94, 94, 110, 93 		readFileByBybeBuffer(FILE_PATH);		// 125, 78, 62, 78, 62 		long time2 = getTime() ;		System.out.println(time2-time1);	}}

在main方法中,調用各方法之后,有五組數據,分辨是我5次讀寫文件測試出來的時間(毫秒)。

個人測試:

public static void main(String args[]) {	long time1 = getTime() ;	//     readFileByByte(FILE_PATH);   //2338,2286 	//     readFileByCharacter(FILE_PATH);//160,162,158 	//     readFileByLine(FILE_PATH);   //46,51,57 	//    readFileByBybeBuffer(FILE_PATH);//19,18,17 	//    readFileByBybeBuffer(FILE_PATH);//2048: 11,13 	//    readFileByBybeBuffer(FILE_PATH);//1024*100 100k,711k: 6,6 	//    readFileByBybeBuffer(FILE_PATH);//1024*100 100k,1422k: 7 	//    readFileByBybeBuffer(FILE_PATH);//1024*100 100k,9951k: 49,48 	//    readFileByBybeBuffer(FILE_PATH);//1024*1000 1M,711k: 7,7 	//    readFileByBybeBuffer(FILE_PATH);//1024*1000 1M,1422k: 7,8 	//    readFileByBybeBuffer(FILE_PATH);//1024*1000 1M,9951k: 48,49 	//    readFileByBybeBuffer(FILE_PATH);//1024*10000 10M,711k: 21,13,17 	//    readFileByBybeBuffer(FILE_PATH);//1024*10000 10M,1422k: 16,17,14,15 	//    readFileByBybeBuffer(FILE_PATH);//1024*10000 10M,9951k:64,60 	long time2 = getTime() ;	System.out.println(time2-time1);}

總結

以上就是本文關于Java文件讀寫IO/NIO及性能比較詳細代碼及總結的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美床上激情在线观看| 日韩成人在线视频| 国产精品国产三级国产aⅴ浪潮| 欧美日韩亚洲成人| 美女久久久久久久久久久| 日韩精品高清在线观看| 91精品国产91久久久久久最新| 国产精品自产拍在线观看中文| 久久久精品久久久| 午夜精品三级视频福利| 亚洲欧美中文日韩在线| 久久久久久有精品国产| 久久精品91久久久久久再现| 亚洲系列中文字幕| 亚洲国产小视频| 国产精品国模在线| 久99九色视频在线观看| 国内自拍欧美激情| 亚洲香蕉av在线一区二区三区| 国产精品日韩av| 国产精品国模在线| 国产精品aaa| 国产精品自拍偷拍| 欧美理论电影在线观看| 国产日韩欧美日韩大片| 91免费国产视频| 国产精品永久免费观看| 欧美日韩免费在线观看| 日本高清不卡在线| 亚洲最新av在线网站| 精品久久久久久久久中文字幕| 成人免费在线视频网站| 日韩精品视频中文在线观看| 日韩欧美成人免费视频| 黄网动漫久久久| 北条麻妃一区二区三区中文字幕| 国产综合久久久久久| 日韩高清中文字幕| 亚洲欧美综合v| 久久成年人免费电影| 国产欧美在线视频| 国产精品美女主播| 午夜精品久久久久久久99热| 欧美性xxxx极品hd满灌| 久久久久久久av| 日韩av黄色在线观看| 91在线免费看网站| 成人免费自拍视频| 久久影视电视剧免费网站| 久99久在线视频| 欧美在线视频在线播放完整版免费观看| 久久综合亚洲社区| 98精品国产高清在线xxxx天堂| 欧美裸身视频免费观看| 久久免费少妇高潮久久精品99| 亚洲国产精品久久精品怡红院| 综合136福利视频在线| 一区二区中文字幕| 亚洲精品久久久久久久久久久| 国内精品400部情侣激情| 久久精品99久久香蕉国产色戒| 国产99久久精品一区二区| 亚洲成人中文字幕| 亚洲自拍中文字幕| 成人做爽爽免费视频| 久久久久久69| 日韩电影中文字幕在线| 国产精品h片在线播放| 久久久精品免费视频| 91国产高清在线| 欧美极品在线播放| 精品亚洲国产成av人片传媒| 中文字幕在线精品| 欧美日韩在线第一页| 欧美一区二区三区精品电影| 色在人av网站天堂精品| 亚洲午夜激情免费视频| 日本精品久久久久久久| 久久99精品国产99久久6尤物| 国产一区红桃视频| 日韩av在线播放资源| 一区二区日韩精品| 日韩精品视频在线| 亚洲男人天堂2024| 欧美一级高清免费| 精品亚洲va在线va天堂资源站| 国产69久久精品成人看| 中日韩美女免费视频网址在线观看| 在线视频欧美日韩| 国产亚洲精品日韩| 亚洲系列中文字幕| 成人xxxx视频| 色悠悠久久久久| 欧美老妇交乱视频| 日韩中文字幕在线观看| 亚洲va国产va天堂va久久| 亚洲精品美女在线观看播放| 色综合久久中文字幕综合网小说| 欧美性猛交xxxxx水多| 日韩电视剧在线观看免费网站| 国产精品一区久久久| 性色av一区二区咪爱| 91亚洲精品久久久| 亚洲欧美精品suv| 国产精品久久97| 国产网站欧美日韩免费精品在线观看| 97在线视频免费| 青草青草久热精品视频在线网站| 中国日韩欧美久久久久久久久| 日韩精品视频免费在线观看| 久久久久久久999精品视频| 欧美激情一二区| 国产成人一区二区三区小说| 日韩免费在线播放| 欧美一区二粉嫩精品国产一线天| 国产精品青草久久久久福利99| 国产日韩在线观看av| 青青草原一区二区| 欧美日韩国产一区中文午夜| 亚洲男人av在线| 亚洲自拍偷拍在线| 精品精品国产国产自在线| 国产成人精品av在线| 午夜精品久久久久久久男人的天堂| 日韩有码在线视频| 欧日韩在线观看| 欧美精品aaa| 8090理伦午夜在线电影| 国产精品观看在线亚洲人成网| 亚洲日本中文字幕| 精品国产91久久久| 精品久久久国产| 尤物九九久久国产精品的特点| 成人a级免费视频| 国产精品永久免费观看| 97视频在线观看网址| 亚洲日本中文字幕免费在线不卡| 亚洲影院污污.| 国产精品av网站| 国产精品稀缺呦系列在线| 亚洲成av人乱码色午夜| 97精品国产91久久久久久| 国产精品福利久久久| 欧美亚洲激情在线| 国产综合在线视频| 91久久久久久久久久久久久| 亚洲女人天堂视频| 在线观看久久av| 亚洲性xxxx| 国产又爽又黄的激情精品视频| 亚洲深夜福利视频| 久久精品视频在线观看| 国产91色在线|| 日韩av综合网站| 成人免费高清完整版在线观看| 亚洲综合在线播放| 疯狂做受xxxx高潮欧美日本| 国产免费一区二区三区在线观看| 久久久久久国产精品| 成人激情视频小说免费下载| 亚洲精品www久久久久久广东| 久久99久久99精品免观看粉嫩| 中文国产成人精品| 欧美电影免费播放|