[Java] 讀取檔案方法大全
阿新 • • 發佈:2019-02-18
publicclass ReadFromFile {
/**
* 以位元組為單位讀取檔案,常用於讀二進位制檔案,如圖片、聲音、影像等檔案。
*/publicstaticvoid readFileByBytes(String fileName) {
File file =new File(fileName);
InputStream in =null;
try {
System.out.println("以位元組為單位讀取檔案內容,一次讀一個位元組:");
// 一次讀一個位元組 in =new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) !=-1) {
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
System.out.println("以位元組為單位讀取檔案內容,一次讀多個位元組:");
// 一次讀多個位元組byte[] tempbytes =newbyte[100];
int byteread =0;
in =new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 讀入多個位元組到位元組陣列中,byteread為一次讀入的位元組數while ((byteread = in.read(tempbytes)) !=-1) {
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in !=null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字元為單位讀取檔案,常用於讀文字,數字等型別的檔案
*/publicstaticvoid readFileByChars(String fileName) {
File file =new File(fileName);
Reader reader =null;
try {
System.out.println("以字元為單位讀取檔案內容,一次讀一個位元組:");
// 一次讀一個字元 reader =new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) !=-1) {
// 對於windows下,\r\n這兩個字元在一起時,表示一個換行。
// 但如果這兩個字元分開顯示時,會換兩次行。
// 因此,遮蔽掉\r,或者遮蔽\n。否則,將會多出很多空行。if (((char) tempchar) !='\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字元為單位讀取檔案內容,一次讀多個位元組:");
// 一次讀多個字元char[] tempchars =newchar[30];
int charread =0;
reader =new InputStreamReader(new FileInputStream(fileName));
// 讀入多個字元到字元陣列中,charread為一次讀取字元數while ((charread = reader.read(tempchars)) !=-1) {
// 同樣遮蔽掉\r不顯示if ((charread == tempchars.length)
&& (tempchars[tempchars.length -1] !='\r')) {
System.out.print(tempchars);
} else {
for (int i =0; i < charread; i++) {
if (tempchars[i] =='\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader !=null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行為單位讀取檔案,常用於讀面向行的格式化檔案
*/publicstaticvoid readFileByLines(String fileName) {
File file =new File(fileName);
BufferedReader reader =null;
try {
System.out.println("以行為單位讀取檔案內容,一次讀一整行:");
reader =new BufferedReader(new FileReader(file));
String tempString =null;
int line =1;
// 一次讀入一行,直到讀入null為檔案結束while ((tempString = reader.readLine()) !=null) {
// 顯示行號 System.out.println("line "+ line +": "+ tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader !=null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 隨機讀取檔案內容
*/publicstaticvoid readFileByRandomAccess(String fileName) {
RandomAccessFile randomFile =null;
try {
System.out.println("隨機讀取一段檔案內容:");
// 開啟一個隨機訪問檔案流,按只讀方式 randomFile =new RandomAccessFile(fileName, "r");
// 檔案長度,位元組數long fileLength = randomFile.length();
// 讀檔案的起始位置int beginIndex = (fileLength >4) ?4 : 0;
// 將讀檔案的開始位置移到beginIndex位置。 randomFile.seek(beginIndex);
byte[] bytes =newbyte[10];
int byteread =0;
// 一次讀10個位元組,如果檔案內容不足10個位元組,則讀剩下的位元組。
// 將一次讀取的位元組數賦給bytereadwhile ((byteread = randomFile.read(bytes)) !=-1) {
System.out.write(bytes, 0, byteread);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (randomFile !=null) {
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 顯示輸入流中還剩的位元組數
*/privatestaticvoid showAvailableBytes(InputStream in) {
try {
System.out.println("當前位元組輸入流中的位元組數為:"+ in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
publicstaticvoid main(String[] args) {
String fileName ="C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
/**
* 以位元組為單位讀取檔案,常用於讀二進位制檔案,如圖片、聲音、影像等檔案。
*/publicstaticvoid readFileByBytes(String fileName) {
File file =new File(fileName);
InputStream in =null;
try {
System.out.println("以位元組為單位讀取檔案內容,一次讀一個位元組:");
// 一次讀一個位元組
int tempbyte;
while ((tempbyte = in.read()) !=-1) {
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
System.out.println("以位元組為單位讀取檔案內容,一次讀多個位元組:");
// 一次讀多個位元組byte[] tempbytes =newbyte[100];
int byteread =0;
in =new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 讀入多個位元組到位元組陣列中,byteread為一次讀入的位元組數while ((byteread
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in !=null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字元為單位讀取檔案,常用於讀文字,數字等型別的檔案
*/publicstaticvoid readFileByChars(String fileName) {
File file =new File(fileName);
Reader reader =null;
try {
System.out.println("以字元為單位讀取檔案內容,一次讀一個位元組:");
// 一次讀一個字元 reader =new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) !=-1) {
// 對於windows下,\r\n這兩個字元在一起時,表示一個換行。
// 但如果這兩個字元分開顯示時,會換兩次行。
// 因此,遮蔽掉\r,或者遮蔽\n。否則,將會多出很多空行。if (((char) tempchar) !='\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字元為單位讀取檔案內容,一次讀多個位元組:");
// 一次讀多個字元char[] tempchars =newchar[30];
int charread =0;
reader =new InputStreamReader(new FileInputStream(fileName));
// 讀入多個字元到字元陣列中,charread為一次讀取字元數while ((charread = reader.read(tempchars)) !=-1) {
// 同樣遮蔽掉\r不顯示if ((charread == tempchars.length)
&& (tempchars[tempchars.length -1] !='\r')) {
System.out.print(tempchars);
} else {
for (int i =0; i < charread; i++) {
if (tempchars[i] =='\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader !=null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行為單位讀取檔案,常用於讀面向行的格式化檔案
*/publicstaticvoid readFileByLines(String fileName) {
File file =new File(fileName);
BufferedReader reader =null;
try {
System.out.println("以行為單位讀取檔案內容,一次讀一整行:");
reader =new BufferedReader(new FileReader(file));
String tempString =null;
int line =1;
// 一次讀入一行,直到讀入null為檔案結束while ((tempString = reader.readLine()) !=null) {
// 顯示行號 System.out.println("line "+ line +": "+ tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader !=null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 隨機讀取檔案內容
*/publicstaticvoid readFileByRandomAccess(String fileName) {
RandomAccessFile randomFile =null;
try {
System.out.println("隨機讀取一段檔案內容:");
// 開啟一個隨機訪問檔案流,按只讀方式 randomFile =new RandomAccessFile(fileName, "r");
// 檔案長度,位元組數long fileLength = randomFile.length();
// 讀檔案的起始位置int beginIndex = (fileLength >4) ?4 : 0;
// 將讀檔案的開始位置移到beginIndex位置。 randomFile.seek(beginIndex);
byte[] bytes =newbyte[10];
int byteread =0;
// 一次讀10個位元組,如果檔案內容不足10個位元組,則讀剩下的位元組。
// 將一次讀取的位元組數賦給bytereadwhile ((byteread = randomFile.read(bytes)) !=-1) {
System.out.write(bytes, 0, byteread);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (randomFile !=null) {
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 顯示輸入流中還剩的位元組數
*/privatestaticvoid showAvailableBytes(InputStream in) {
try {
System.out.println("當前位元組輸入流中的位元組數為:"+ in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
publicstaticvoid main(String[] args) {
String fileName ="C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}