一、FileWriter 和BufferedWriter 結合寫入文件
FileWriter是字符流寫入字符到文件。默認情況下,它會使用新的內容代替文件原有的所有內容,但是,當指定一個true值作為FileWriter構造函數的第二個參數,它會保留現有的內容,並追加新內容在文件的末尾。
BufferedWriter:緩沖字符,是一個字符流類來處理字符數據。不同於字節流(數據轉換成字節FileOutPutStream),可以直接寫字符串、數組或字符數據保存到文件。
默認情況,替換原有內容:
new
FileWriter(file);
保留原來的文件內容:
new
FileWriter(file,
true
)
public static void writeInFileByfb() { File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt"); String content="要寫入文件的新內容"; FileWriter fw=null; BufferedWriter bw=null; try{ if(!f.exists()){ f.createNewFile(); } fw=new FileWriter(f.getAbsoluteFile(),true); //true表示可以追加新內容 //fw=new FileWriter(f.getAbsoluteFile()); //表示不追加 bw=new BufferedWriter(fw); bw.write(content); bw.close(); }catch(Exception e){ e.printStackTrace(); } }
二、FileOutPutStream 字節流寫入文件
文件輸出流是一種用於處理原始二進制數據的字節流淚。 為了將數據寫入到文件中,必須將數據轉換為字節,並保存到文件。具體例子如下:
package com.joyplus.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FileOutPutTest { public static void main(String[] args) { FileOutPutTest.writeInFileByfi(); } public static void writeInFileByfi(){ File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fi.txt"); FileOutputStream fos=null; try { if(!f.exists()){ f.createNewFile(); } fos=new FileOutputStream(f); String content="要寫入的新內容!"; fos.write(content.getBytes()); } catch (IOException e) { e.printStackTrace(); }finally{ if(fos!=null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
三、RandomAccessFile 寫入文件
RandomAccessFile的唯一父類是Object,與其他流父類不同。是用來訪問那些保存數據記錄的文件的,這樣你就可以用seek( )方法來訪問記錄,並進行讀寫了。這些記錄的大小不必相同;但是其大小和位置必須是可知的.
如下例子是RandomAccessFile如何進行寫入文件的例子:
public static void writeInFileByRdA(){ String content="randowAccessFile"; try{ // 打開一個隨機訪問文件流,按讀寫方式 RandomAccessFile randomFile = new RandomAccessFile("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt", "rw"); // 文件長度,字節數 long fileLength = randomFile.length(); //將寫文件指針移到文件尾。 randomFile.seek(fileLength); randomFile.writeBytes(content); randomFile.close(); }catch(Exception e){ e.printStackTrace(); } }
文件的讀取
一、FileInputStream 字節流讀取文件 【注意:讀取中文的時候會亂碼】
具體代碼如下:
//按照字節讀取文件內容 public static String readFileByByte(){ String s=""; File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt"); InputStream in=null; try{ in=new FileInputStream(f); int tempByte; while((tempByte=in.read())!=-1){ System.out.println(tempByte); s+=tempByte; } in.close(); }catch(Exception e){ e.printStackTrace(); } System.out.println("content:"+s); return s; }
二、InputStreamReader 字符流讀取文件內容
//按照字符讀取文件內容 public static String readFileByChar(){ String s=""; File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt"); Reader rdr=null; try{ rdr=new InputStreamReader(new FileInputStream(f)); int temp; while((temp=rdr.read())!=-1){ //對於window下,\r\n這兩個字符在一起時,表示一個換行。 //但是如果這兩個字符分開顯示時,會換兩行。 //因此,屏蔽掉\r,或者屏蔽掉\n。否則,將會出現很多空行 if(((char)temp)!='\r'){ s+=(char)temp; } } }catch(Exception e){ e.printStackTrace(); }finally{ try { rdr.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println(s); return s; }
三、BufferedReader 以行為單位讀取文件內容
//按照行讀取文件 public static String readFileByLine(){ String s=""; File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt"); BufferedReader br=null; try{ System.out.println("按照行讀取文件內容"); br=new BufferedReader(new FileReader(f)); String temp; while((temp=br.readLine())!=null){ s+=temp; } }catch(Exception e){ e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("file content:"+s); return s; }
//隨機行讀取文件 public static String readFileByRand(){ String s=""; File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt"); RandomAccessFile raf=null; try{ //打開一個文件流, 按只讀方式 raf=new RandomAccessFile(f.getName(), "r"); //文件長度,字節數 long fileLength=raf.length(); //讀文件的起始位置 int beginIndex=(fileLength>4)?4:0; //將讀文件的開始位置移到beginIndex位置 raf.seek(beginIndex); byte[] bytes=new byte[10]; int byteread=0; //一次讀10個字節,如果文件內容不足10個字節,則讀剩下的文字。 //將一次讀取的字節數賦給byteread while((byteread=raf.read(bytes))!=-1){ System.out.write(bytes,0,byteread); } }catch(Exception e){ e.printStackTrace(); }finally{ if(raf!=null){ try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } //System.out.println("文件內容:"+s); return s; }
補充的文件知識:
/** * 顯示輸入流中還剩的字節數 */ private static void showAvailableBytes(InputStream in) { try { System.out.println("當前字節輸入流中的字節數為:" + in.available()); } catch (IOException e) { e.printStackTrace(); } }