【Java】IO 使用 InputStream 與 reader 讀取文件

筆記

IO 使用 InputStream 與 reader 讀取文件 之實作範例。


一、IO 讀取檔案之相關類別

inputstream類別
(1)inputstream是個抽象類別,下有 FilterInputStream(過濾)、ObjectInputStream(物件序列化) 、FileInputStream(從文件中獲取資料寫入java)
(2)FilterInputStream 下有 DataInputStream(資料型態轉換)、BufferedInputStream(緩衝)

reader類別
(1)reader是個抽象類別,下有 FilterReader(過濾)、BufferedReader(緩衝) 、InputStreamReader(位元轉換為字元)
(2)InputStreamReader 下有 FileReader(從文件中獲取資料寫入java)

二、建立資料夾/空白檔案

//建立資料夾
File dir = new File("C:/test/ioFile3");    
	    
//判斷此路徑資料夾是否存在	  
if(!dir.exists()) {
        
   //方法擇一使用
   //方法1
   dir.mkdir();
	    	 
   //方法2
   Path p = Paths.get(dir.toString()); 
   Files.createDirectory(p);
  	 
}
	   	
//指定路徑建立[空白檔案]
File image = new File("C:/test/ioFile3/image.pdf");        
image.createNewFile(); 
	    


三、FileInputStream:使用範例&資料讀取

try {
    long start,end;	//計算讀取檔案的秒數	
    start=System.currentTimeMillis();

    File file=new File("C://fileForTest/"+"test.txt");  //請更換資料夾位置
	
    //使用BufferedInputStream來提高讀取檔案的效率
    //InputStream fr = new BufferedInputStream(  new FileInputStream(file) );
	 
    //方法一:使用 Apache Commons IO IOUtils
    InputStream fr = new BufferedInputStream(  new FileInputStream(file) );
    String data = new String();
    data = IOUtils.toString(fr, StandardCharsets.UTF_8);
    System.out.println("方法一:"+ (char)content);    
    fr.close();//關閉
   
    //方法二:使用read()
    InputStream fr = new BufferedInputStream(  new FileInputStream(file) );
    int content=0;
    while ((content = fr.read()) != -1) {
        System.out.println("方法二:"+(char)content);
    }
    fr.close();

    //方法三:使用read(byte[] b)
    InputStream in = new FileInputStream(file);
    byte[] bytes = new byte[(int) file.length()];
    in.read(bytes);
    String content1 = new String(bytes, StandardCharsets.UTF_8);
    System.out.println("方法三:"+content1);
    in.close();
	
    //方法四:使用readLine()
    InputStream in1 = new FileInputStream(file);
    BufferedReader br = new BufferedReader(new InputStreamReader(in1));
    String line;
    StringBuilder sb = new StringBuilder();
    while ((line = br.readLine()) != null) {
        sb.append(line + System.lineSeparator());
    }
    System.out.println("方法四:"+sb.toString());
    br.close();

	
    end=System.currentTimeMillis();
    System.out.println("讀取檔案的時間="+(end-start));

} catch (FileNotFoundException e) {
	logger.error("FileNotFoundException: ", e);

} catch (IOException e) {
	logger.error("IOException: ", e);

}
 

四、FileReader的範例:待更新


try {
	long start,end;	//計算讀取檔案的秒數	
	start=System.currentTimeMillis();

	File file=new File("C://fileForTest/"+"test.txt");  //請更換資料夾位置
	
        //檢查檔案是否存在		
	if(file.exists()) {

	    //使用BufferedReader來提高讀取檔案的效率
	    Reader fr = new BufferedReader(  new FileReader(file) );
            String data = new String();
	    data = IOUtils.toString(fr); //使用apache IOUtils
		
	    if(!"".equals(data)) {
		//處理資料			
	    }
     	
	   fr.close();//關閉
		
	}
		
	end=System.currentTimeMillis();
	logger.info("讀取檔案的時間="+(end-start));

} catch (FileNotFoundException e) {
	logger.error("FileNotFoundException: ", e);

} catch (IOException e) {
	logger.error("IOException: ", e);

}
 

Related Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js