歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java讀寫文件 將內容追加到文件尾部

1、java讀寫文件大全

最初java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中 write(char[] ch,int off,intlength),flush()和close()方法為抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子類應該分別實現他們。

當我們讀寫文本文件的時候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是InputStreamReader,它是字節轉換為字符的橋梁。你可以在構造器重指定編碼的方式,如果不指定的話將采用底層操作系統的默認編碼方式,例如GBK等。當使用FileReader讀取文件的時候。

package com.thread.test;

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.RandomAccessFile; 
import java.io.Reader; 
public class ReadFromFile { 
 
public static void 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 = new byte[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) { 




 
public static void 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下,rn這兩個字符在一起時,表示一個換行。 
//但如果這兩個字符分開顯示時,會換兩次行。 
//因此,屏蔽掉r,或者屏蔽n。否則,將會多出很多空行。 
if (((char)tempchar) != 'r'){ 
System.out.println((char)tempchar); 


reader.close(); 
} catch (Exception e) { 
e.printStackTrace(); 

try { 
System.out.println("以字符為單位讀取文件內容,一次讀多個字節:"); 
//一次讀多個字符 
char[] tempchars = new char[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) { 




 
public static void 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) { 




 
public static void 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 = new byte[10]; 
int byteread = 0; 
//一次讀10個字節,如果文件內容不足10個字節,則讀剩下的字節。 
//將一次讀取的字節數賦給byteread 
while ((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) { 




 
private static void showAvailableBytes(InputStream in){ 
try { 
System.out.println("當前字節輸入流中的字節數為:" + in.available()); 
} catch (IOException e) { 
e.printStackTrace(); 


public static void main(String[] args) { 
String fileName = "D:/t2.txt"; 
ReadFromFile.readFileByBytes(fileName); 
ReadFromFile.readFileByChars(fileName); 
ReadFromFile.readFileByLines(fileName); 
ReadFromFile.readFileByRandomAccess(fileName); 

}

 

2、將內容追加到文件尾部  ===

 

package com.thread.test;

import java.io.FileWriter; 
import java.io.IOException; 
import java.io.RandomAccessFile; 
 
public class AppendToFile { 
 
public static void appendMethodA(String fileName, 
 
String content){ 
try { 
// 打開一個隨機訪問文件流,按讀寫方式 
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw"); 
// 文件長度,字節數 
long fileLength = randomFile.length(); 
//將寫文件指針移到文件尾。 
randomFile.seek(fileLength); 
randomFile.writeBytes(content); 
randomFile.close(); 
} catch (IOException e){ 
e.printStackTrace(); 

public static void appendMethodB(String fileName, String content){
try {
//打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件 
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "D:/t2.txt";
String content = "new append!";
//按方法A追加文件 
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, "append end. n");
//顯示文件內容 
ReadFromFile.readFileByLines(fileName);
//按方法B追加文件 
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, "append end. n");
//顯示文件內容 
ReadFromFile.readFileByLines(fileName);
}
}

Copyright © Linux教程網 All Rights Reserved