個(gè)人經(jīng)驗(yàn),
專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、商城系統(tǒng)網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺(tái)開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,成都創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
讀文件有4種方法,
1 按行讀
2 按規(guī)定大小字節(jié)讀
3 按流讀
4 隨機(jī)讀取文件
我認(rèn)為第3種是最好的,而且他是通吃的,
下面是我從網(wǎng)上找來的,你看看有用嗎?
====================================
前兩天用到讀寫文件的操作,上網(wǎng)搜了一些這方面的資料。很有用的。
java中多種方式讀文件
一、多種方式讀文件內(nèi)容。
1、按字節(jié)讀取文件內(nèi)容
2、按字符讀取文件內(nèi)容
3、按行讀取文件內(nèi)容
4、隨機(jī)讀取文件內(nèi)容
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 {
/**
* 以字節(jié)為單位讀取文件,常用于讀二進(jìn)制文件,如圖片、聲音、影像等文件。
* @param fileName 文件的名
*/
public static void readFileByBytes(String fileName){
File file = new File(fileName);
InputStream in = null;
try {
System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
// 一次讀一個(gè)字節(jié)
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("以字節(jié)為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
//一次讀多個(gè)字節(jié)
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
//讀入多個(gè)字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
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) {
}
}
}
}
/**
* 以字符為單位讀取文件,常用于讀文本,數(shù)字等類型的文件
* @param fileName 文件名
*/
public static void readFileByChars(String fileName){
File file = new File(fileName);
Reader reader = null;
try {
System.out.println("以字符為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
// 一次讀一個(gè)字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1){
//對(duì)于windows下,rn這兩個(gè)字符在一起時(shí),表示一個(gè)換行。
//但如果這兩個(gè)字符分開顯示時(shí),會(huì)換兩次行。
//因此,屏蔽掉r,或者屏蔽n。否則,將會(huì)多出很多空行。
if (((char)tempchar) != 'r'){
System.out.print((char)tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字符為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
//一次讀多個(gè)字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
//讀入多個(gè)字符到字符數(shù)組中,charread為一次讀取字符數(shù)
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; icharread; 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) {
}
}
}
}
/**
* 以行為單位讀取文件,常用于讀面向行的格式化文件
* @param fileName 文件名
*/
public static void readFileByLines(String fileName){
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行為單位讀取文件內(nèi)容,一次讀一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
//一次讀入一行,直到讀入null為文件結(jié)束
while ((tempString = reader.readLine()) != null){
//顯示行號(hào)
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 隨機(jī)讀取文件內(nèi)容
* @param fileName 文件名
*/
public static void readFileByRandomAccess(String fileName){
RandomAccessFile randomFile = null;
try {
System.out.println("隨機(jī)讀取一段文件內(nèi)容:");
// 打開一個(gè)隨機(jī)訪問文件流,按只讀方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件長(zhǎng)度,字節(jié)數(shù)
long fileLength = randomFile.length();
// 讀文件的起始位置
int beginIndex = (fileLength 4) ? 4 : 0;
//將讀文件的開始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
//一次讀10個(gè)字節(jié),如果文件內(nèi)容不足10個(gè)字節(jié),則讀剩下的字節(jié)。
//將一次讀取的字節(jié)數(shù)賦給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) {
}
}
}
}
/**
* 顯示輸入流中還剩的字節(jié)數(shù)
* @param in
*/
private static void showAvailableBytes(InputStream in){
try {
System.out.println("當(dāng)前字節(jié)輸入流中的字節(jié)數(shù)為:" + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
二、將內(nèi)容追加到文件尾部
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 將內(nèi)容追加到文件尾部
*/
public class AppendToFile {
/**
* A方法追加文件:使用RandomAccessFile
* @param fileName 文件名
* @param content 追加的內(nèi)容
*/
public static void appendMethodA(String fileName,String content){
try {
// 打開一個(gè)隨機(jī)訪問文件流,按讀寫方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
// 文件長(zhǎng)度,字節(jié)數(shù)
long fileLength = randomFile.length();
//將寫文件指針移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e){
e.printStackTrace();
}
}
/**
* B方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethodB(String fileName, String content){
try {
//打開一個(gè)寫文件器,構(gòu)造函數(shù)中的第二個(gè)參數(shù)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 = "C:/temp/newTemp.txt";
String content = "new append!";
//按方法A追加文件
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, "append end. n");
//顯示文件內(nèi)容
ReadFromFile.readFileByLines(fileName);
//按方法B追加文件
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, "append end. n");
//顯示文件內(nèi)容
ReadFromFile.readFileByLines(fileName);
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------
寫入文件
try{
FileWriter fw=new FileWriter(SystemConfig.getRealPath()+"WEB-INF/url.txt");
fw.write("movie"+name);
fw.close();
}catch(IOException e){
e.printStackTrace();
}
讀文件中內(nèi)容
try{
FileReader fr = null;
fr = new FileReader(SystemConfig.getRealPath()+"WEB-INF/url.txt");
BufferedReader br=new BufferedReader(fr);
String Line = null;
Line = br.readLine();
while(Line!=null){
s=Line;
Line=null;
br.close();
fr.close();
}
}catch(IOException e1){
e1.printStackTrace();
}
上傳文件
try {
InputStream stream = getUpFile().getInputStream();//把文件讀入
OutputStream bos = new FileOutputStream(filePath + "movie" +name);//建立一個(gè)上傳文件的輸出流
int bytesRead = 0;
byte[] buffer = new byte[1026];
while ( (bytesRead = stream.read(buffer, 0, 1026)) != -1) {
bos.write(buffer, 0, bytesRead);//將文件寫入服務(wù)器
}
bos.close();
stream.close();
}catch(Exception e){
System.err.print(e);
}
準(zhǔn)備好環(huán)境,比如安裝好Eclipse,IDEA等你喜歡的集成開發(fā)環(huán)境
準(zhǔn)備好Maven環(huán)境
創(chuàng)建一個(gè)項(xiàng)目,把你要研究的開源項(xiàng)目pom引入進(jìn)來
使用maven把源代碼下載下來
寫一個(gè)簡(jiǎn)單的例子使用開源代碼
分析從啟動(dòng)開始,斷點(diǎn)調(diào)試,看看調(diào)用了哪些方法,每個(gè)方法是怎么實(shí)現(xiàn)的
所有方法都斷點(diǎn)了一遍,你在這個(gè)過程中實(shí)際上已經(jīng)了解了開源代碼是怎么實(shí)現(xiàn)具體功能的了
1.編碼之前想一想
用10分鐘,20分鐘甚至30分鐘的時(shí)間來想想你需要什么,想想什么樣的設(shè)計(jì)模式適合你將要編碼的東西。你會(huì)很慶幸“浪費(fèi)”了那幾分鐘,當(dāng)你不得不更改或添加?xùn)|西到代碼中時(shí)你就不將將浪費(fèi)幾分鐘而是要花費(fèi)更多的時(shí)間。
2.注釋你的代碼
說真的,沒有什么比兩個(gè)月后檢查自己的代碼,卻不記得它用來干什么更糟糕的了。注釋所有重要的內(nèi)容,當(dāng)然那些顯而易見的就免了吧。
3.寫干凈的代碼
錯(cuò)落有致。使用空格。根據(jù)功能模塊化你的代碼。閱讀RobertC.Martin寫的《CleanCode》,非常有幫助。此外,遵循代碼約定/標(biāo)準(zhǔn)(如,尤其如果是共享的代碼。
4.重構(gòu)
沒有人喜歡用那些超級(jí)長(zhǎng)的方法。這通常(幾乎總是)意味著你混雜了功能。用更易于管理的方法分離代碼。還能使得代碼更可重用。
5.不要復(fù)制粘貼代碼
如果你有兩個(gè)或兩個(gè)以上相同的代碼塊,那么你可能做錯(cuò)了什么。閱讀第4條。
6.使用有意義的名稱
雖然命名int變量為“elligent”或char為“mander”是很好笑;但是,這樣的名稱并不能說明變量是用來做什么的。
7.測(cè)試代碼
測(cè)試,測(cè)試,測(cè)試,還是測(cè)試。測(cè)試你的代碼。不要等到已經(jīng)做完程序之后再來測(cè)試,否則當(dāng)你發(fā)現(xiàn)一個(gè)巨大的bug,卻不知道它來自于哪里來的時(shí)候,你會(huì)追悔莫及。
自動(dòng)化測(cè)試通常都是有價(jià)值的。它還有助于節(jié)省大量重測(cè)試和回歸測(cè)試的時(shí)間。
對(duì)于學(xué)習(xí)軟件開發(fā)的人來說,學(xué)會(huì)閱讀源代碼是非常重要的,然而很多人并不具備閱讀源代碼的能力。
很多人不喜歡閱讀源代碼,認(rèn)為這是非常無聊的事情。
如果不會(huì)閱讀源代碼,對(duì)于后面寫代碼是非常困難的,很多開發(fā)人員主要把重心放在寫代碼上,反而忽略代碼的閱讀。
閱讀代碼是非常關(guān)鍵的,下面廣東電腦培訓(xùn)為大家介紹閱讀代碼的技巧。
1、學(xué)會(huì)運(yùn)行代碼運(yùn)行代碼是閱讀代碼的第一步,這樣能夠了解關(guān)于項(xiàng)目的很多細(xì)節(jié),并且了解怎么進(jìn)行運(yùn)行,掌握庫的使用方法。
這樣是了解一個(gè)項(xiàng)目最好的方法,如果能夠自己了解和編寫相關(guān)的項(xiàng)目,這樣對(duì)于使用框架和庫會(huì)有自己的想法。
2、找到高層次的邏輯當(dāng)您開始閱讀項(xiàng)目的代碼時(shí),會(huì)涉及到每個(gè)細(xì)節(jié)。
相反的,你還需要掌握高層次結(jié)構(gòu),從這個(gè)地方找到入口點(diǎn),在很多大型項(xiàng)目開發(fā)中都可以使用這種方法。
如果是進(jìn)行web程序開發(fā),那么廣東IT培訓(xùn)建議應(yīng)該查看不同的包,例如存儲(chǔ)業(yè)務(wù)邏輯的位置,存儲(chǔ)UI代碼的位置,控制器所在的位置等等。
3、了解和使用工具很多工具都可以有助于源代碼閱讀,并且對(duì)可視化代碼有很大的幫助。
在使用過程中,廣東IT培訓(xùn)認(rèn)為IntelliJIdea工具能夠?qū)Ш皆创a,允許使用單詞的一部分,甚至單詞的縮寫進(jìn)行搜索。
您還應(yīng)該學(xué)習(xí)鍵盤的快捷鍵。
使用鼠標(biāo)導(dǎo)航源代碼可能會(huì)非常無聊和緩慢,鍵盤快捷鍵可以更快的進(jìn)行跳轉(zhuǎn)。
4、了解語言更深入地了解特定語言有助于提高您的代碼閱讀技能。
每種語言都有自己的約定,樣式和語法。
這些知識(shí)可以幫助您快速熟悉特定代碼。
其中廣東電腦培訓(xùn)發(fā)現(xiàn)在Java語言中,方法名稱以小寫字母開頭,而在C#語言中,方法名稱以大寫字母開頭。
了解這種差異可以幫助你從源代碼中找到識(shí)別方法。
首先要理清楚代碼結(jié)構(gòu)和業(yè)務(wù)結(jié)構(gòu)(應(yīng)該有些文檔或者大的流程圖),這是閱讀具體代碼的前提。
閱讀Java?web項(xiàng)目的代碼:
你需要找到
View層的代碼:前端頁面、圖片、資源文件都在其中。
Controller層的代碼:控制試圖與模型層以及數(shù)據(jù)傳遞。
Service層的代碼:業(yè)務(wù)邏輯。
Dao層的代碼:數(shù)據(jù)庫訪問邏輯。
從web.xml?-?appcontext.xml?-?xxx