在讀寫大文件, 比如超過100M或者1G的文件時,還用簡單的fileinput和fileoutput是不行的民傻,這樣很容易導(dǎo)致內(nèi)存溢出。在處理大文件的讀寫時场斑,需要采用更好的方式來處理漓踢,通常來講,是利用BufferReader
和BufferWriter
讀取文件的兩種方式
/**
* 讀取大文件
*
* @param filePath
*/
public void readFile(String filePath) {
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(filePath);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (sc != null) {
sc.close();
}
}
}
/**
* 讀取文件
*
* @param filePath
*/
public void readFile2(String filePath) {
File file = new File(filePath);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file), 5 * 1024 * 1024); //如果是讀大文件漏隐,設(shè)置緩存
String tempString = null;
while ((tempString = reader.readLine()) != null) {
System.out.println(tempString);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上面講了兩種讀取文件的方式彭雾,第一種是利用Scanner
掃描文件,第二種利用BufferedReader
設(shè)置緩沖锁保,來讀取文件。
當(dāng)然在讀取過程中半沽,即System.out.println
這句話進(jìn)行數(shù)據(jù)的處理爽柒,而不能把文件都放到內(nèi)存中。
文件寫入
/**
* 寫文件
* @param filePath
* @param fileContent
*/
public void writeFile(String filePath, String fileContent) {
File file = new File(filePath);
// if file doesnt exists, then create it
FileWriter fw = null;
try {
if (!file.exists()) {
file.createNewFile();
}
fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(fileContent);
bw.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
寫文件利用BufferedWriter
者填,可以保證內(nèi)存不會溢出浩村,而且會一直寫入。