1
採用InputStream is = new FileInputStream(File filePath);等輸入流的 形式,讀取文件並存放在StringBuffer中。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Read{
private static String openFile(String filePath) {
File f = new File(filePath);
String ee = new String();
System.out.println("Opening file: " + filePath);
try
{
InputStream is = new FileInputStream(f);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line; // 用來保存每行讀取的內容
line = reader.readLine(); // 讀取第一行
while (line != null) { // 如果 line 爲空說明讀完了
buffer.append(line); // 將讀到的內容添加到 buffer 中
buffer.append(" "); // 添加換行符
line = reader.readLine(); // 讀取下一行
}
// System.out.print(buffer.toString());
ee = buffer.toString();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return ee;
}
public static void main(String[] args){
System.out.print(Read.openFile("l:/fence.log"));
}
}
2 採用支持對隨機存取文件的讀取和寫入 的類 RandomAccessFile,成功讀取文件第一行和最後一行。
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Read2222 {
public String rea(String descAddr){
String result = new String();
RandomAccessFile rf = null;
StringTokenizer st = new StringTokenizer(descAddr,".");
String fileLuJing = st.nextToken() + ".db";
ArrayList<String> ziFu = new ArrayList<String>();//每一行的字符串爲一個元素
try {
rf = new RandomAccessFile(fileLuJing, "r");
long len = rf.length();
long start = rf.getFilePointer();
//System.out.println(start);
long nextend = start + len - 1;
String eachLine;//用於向ArrayList添加元素的代表
String lastLine;//最後一行的字符串
String firstLine = rf.readLine();
rf.seek(start);
int c = -1;
while (start<nextend) {
c = rf.read();
if (c == ' ' || c == ' ') {
eachLine= rf.readLine();
ziFu.add(eachLine);
}
rf.seek(start);
start++;
}
rf.close();
lastLine = ziFu.get(ziFu.size()-1);
/*********轉置*****/
// System.out.println("firstLine: "+firstLine);
// System.out.println("lastLine: "+lastLine);
StringTokenizer nameToken = new StringTokenizer(firstLine," ");
StringTokenizer valueToken = new StringTokenizer(lastLine," ");
String temp;
while(nameToken.hasMoreTokens() && valueToken.hasMoreTokens() )
{
// System.out.println(result);
temp = nameToken.nextToken() + " " + valueToken.nextToken() + " " ;
result+= temp ;
}
/*********轉置*****/
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (rf != null)
rf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}
特別注意,rf.seek()定位,這條語句的地方; rf.readLine()讀取定位點之後的一行,所以第一行的讀取在循環之外。