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);
}