據說,java讀寫文件要寫很多,賊麻煩,不像c艹,幾行代碼就搞定。只能抄抄模板拿來用了。
輸入輸出流分字節流和字符流。先看看字符流的操作,字節轉化為字符也可讀寫。
一、寫入文件
1.FileWriter類:
FileWriter fw=new FileWriter("hello");//在workspace工作空間里創建文件,文件名為hello
FileWriter fw=new FileWriter("E:\\hello");//在E盤創建文件,文件名為hello
FileWriter fw=new FileWriter("E:\\hello.txt");//在E盤創建txt文件hello
如果在相同位置已經有同名文件會覆蓋原來的文件,即一個新建的空文件。
如果路徑不對則會拋出異常,例如:java.io.FileNotFoundException: Z:\hello (系統找不到指定的路徑。)
2.BufferedWriter類:
將文本寫入字符輸出流,緩沖字符,以提供單個字符,數組和字符串的高效寫入。可以指定緩沖區大小,或者可以接受默認大小。 默認值足夠大,可用於大多數用途。

1 import java.io.*; 2 3 public class MyTest9 { 4 public static void main(String []args) { 5 try{ 6 FileWriter fw=new FileWriter("E:\\hello");//在workspace工作空間里創建文件 7 BufferedWriter bw=new BufferedWriter(fw);//創建bw對象專門為fw對象寫入字符流,fw是某個文件引用(對象) 8 bw.write("Hello world!\n"); //為文件fw寫入字符 9 bw.write('\n');//換行 10 bw.write("\n");//換行 11 bw.newLine();//換行,並非所有平台都使用換行符('\ n')來終止行。 因此,調用此方法來終止每個輸出行,因此優選直接寫入換行符。 12 bw.write("Oh no!\n"); 13 String s="shoulinniao\n"; 14 bw.write(s); 15 bw.write(s,0,5); 16 bw.newLine(); 17 char[] s2=new char[10]; 18 for(int i=0;i<10;i++) 19 s2[i]=(char)(i+'0'); 20 bw.write(s2); 21 bw.newLine(); 22 bw.write(s2,0,8);//從0開始截取,截8個長度,即下標0-7 23 bw.newLine(); 24 int a=19; 25 bw.write(a);//數字讀不進去,要轉成字符 26 bw.newLine(); 27 bw.write(8); 28 bw.newLine(); 29 bw.write(s.valueOf(a));//轉化為字符型 30 bw.close();//不關掉的話duqu.txt里沒東西 31 }catch(Exception ex){ 32 ex.printStackTrace(); 33 } 34 } 35 }
二、讀出文件
1.File類:
File(String path);//通過將給定的路徑名字符串轉換為抽象路徑名來創建新的 File實例。
String [] list();//返回一個字符串數組,命名由此抽象路徑名表示的目錄中的文件和目錄。
String getPath();
//將此抽象路徑名轉換為路徑名字符串。
Boolean isAbsolute();//判斷是否為絕對路徑
Boolean isDirectory();//判斷是否為目錄
boolean mkdir();//創建由此抽象路徑名命名的目錄。
boolean mkdirs();//創建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄。如果目錄存在不會重建空目錄

1 import java.io.File; 2 3 public class MyTest10{ 4 public static void main(String []args) { 5 try{ 6 File ffwq=new File("E:\\");//創建代表路徑的對象,並不是創建一個文件 7 8 File ff=new File("E:\\new_directory3"); 9 ff.mkdirs(); //在路徑ff下新建一個目錄目錄名new_directory 10 //打印出目錄下的內容 11 if(ffwq.isDirectory()){ 12 String[] de=ffwq.list(); 13 for(int i=0;i<de.length;i++){ 14 System.out.println(de[i]); 15 } 16 System.out.println("---------------------------1"); 17 de=ff.list(); 18 for(int i=0;i<de.length;i++){ 19 System.out.println(de[i]); 20 } 21 } 22 System.out.println("---------------------------2"); 23 //取的文件的絕對路徑 24 System.out.println(ff.getAbsolutePath()); 25 //刪除對象代表的文件.如果目錄下有文件也會返回false,刪除不成功也會返回false。 26 boolean delet=ff.delete(); //目錄下是空的才能刪除,返回true,否則返回false 27 System.out.println(delet); 28 }catch(Exception ex){ 29 ex.printStackTrace(); 30 } 31 } 32 }
2.FileReader類:
FileReader(File file);//創建一個新的 FileReader ,給出 File讀取。
FileReader(String fileName);//創建一個新的 FileReader ,給定要讀取的文件的名稱。
3. BufferedReader類:
從字符輸入流讀取文本,緩沖字符,以提供字符,數組和行的高效讀取。可以指定緩沖區大小,或者可以使用默認大小。 默認值足夠大,可用於大多數用途。
BufferedReader(Reader in);//創建使用默認大小的輸入緩沖區的緩沖字符輸入流。
BufferedReader(Reader in, int sz);//創建使用指定大小的輸入緩沖區的緩沖字符輸入流。
void close();//關閉流並釋放與之相關聯的任何系統資源。
String readLine();//讀一行字符。
1 public class MyTest8 { 2 public static void main(String[] args) { 3 ArrayList<String> list = new ArrayList<String>(); 4 try{ 5 File f=new File("E:\\hello");//創建文件對象f 6 FileReader fr=new FileReader(f); //fr對象 對應f的讀出 7 BufferedReader br=new BufferedReader(fr);//br是 對應fr的 讀出緩沖區 8 String shuchu=null; 9 int i=0; 10 while((shuchu=br.readLine())!=null){ 11 list.add(shuchu);//用一個數組全部存起來方便修改 12 System.out.println(shuchu); 13 } 14 for(int j=0;j<list.size();j++) 15 System.out.println(list.get(j)); 16 br.close(); 17 }catch(Exception ex){ 18 ex.printStackTrace(); 19 } 20 } 21 }