FileReader fr = new FileReader("aaa.txt"); //建立輸入流對象,關聯aaa.txt int ch; while((ch = fr.read()) != -1) { //將讀到的字符賦值給ch System.out.println((char)ch); //將讀到的字符強轉後打印 } fr.close(); //關流
package com.heima.chario; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Demo1_FileReader { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //demo1(); FileReader fr = new FileReader("xxx.txt"); int c; while((c = fr.read()) != -1) { //經過項目默認的碼錶一次讀取一個字符 System.out.print((char)c); } fr.close(); } public static void demo1() throws FileNotFoundException, IOException { FileReader fr = new FileReader("xxx.txt"); int x = fr.read(); System.out.println(x); char c = (char)x; System.out.println(c); fr.close(); } }
FileWriter類的write()方法能夠自動把字符轉爲字節寫出java
FileWriter fw = new FileWriter("aaa.txt"); fw.write("aaa"); fw.close();
package com.heima.chario; import java.io.FileWriter; import java.io.IOException; public class Demo2_FileWriter { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("yyy.txt"); fw.write("你們好,基礎班快接近尾聲了,你們要努力,要堅持!!!"); fw.write(97); fw.close(); } }
FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); int ch; while((ch = fr.read()) != -1) { fw.write(ch); } fr.close(); fw.close();
package com.heima.chario; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Demo3_Copy { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //demo1(); //demo2(); //demo3(); BufferedReader br = new BufferedReader(new FileReader("xxx.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("yyy.txt")); int c; while((c = br.read()) != -1) { bw.write(c); } br.close(); bw.close(); } public static void demo3() throws FileNotFoundException, IOException { FileReader fr = new FileReader("xxx.txt"); FileWriter fw = new FileWriter("yyy.txt"); char[] arr = new char[1024]; int len; while((len = fr.read(arr)) != -1) { //將文件上的數據讀取到字符數組中 fw.write(arr,0,len); //將字符數組中的數據寫到文件上 } fr.close(); fw.close(); } public static void demo2() throws FileNotFoundException, IOException { //字符流不能拷貝純文本的文件 FileReader fr = new FileReader("雙元.jpg"); FileWriter fw = new FileWriter("copy.jpg"); int c; while((c = fr.read()) != -1) { fw.write(c); } fr.close(); fw.close(); } public static void demo1() throws FileNotFoundException, IOException { FileReader fr = new FileReader("xxx.txt"); FileWriter fw = new FileWriter("zzz.txt"); int c; while((c = fr.read()) != -1) { fw.write(c); } fr.close(); fw.close(); //Writer類中有一個2k的小緩衝區,若是不關流,就會將內容寫到緩衝區裏,關流會將緩衝區內容刷新,再關閉 } }
FileReader fr = new FileReader("aaa.txt"); //建立字符輸入流,關聯aaa.txt FileWriter fw = new FileWriter("bbb.txt"); //建立字符輸出流,關聯bbb.txt int len; char[] arr = new char[1024*8]; //建立字符數組 while((len = fr.read(arr)) != -1) { //將數據讀到字符數組中 fw.write(arr, 0, len); //從字符數組將數據寫到文件上 } fr.close(); //關流釋放資源 fw.close();
BufferedReader br = new BufferedReader(new FileReader("aaa.txt")); //建立字符輸入流對象,關聯aaa.txt BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt")); //建立字符輸出流對象,關聯bbb.txt int ch; while((ch = br.read()) != -1) { //read一次,會先將緩衝區讀滿,從緩衝去中一個一個的返給臨時變量ch bw.write(ch); //write一次,是將數據裝到字符數組,裝滿後再一塊兒寫出去 } br.close(); //關流 bw.close();
BufferedReader br = new BufferedReader(new FileReader("aaa.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt")); String line; while((line = br.readLine()) != null) { bw.write(line); //bw.write("\r\n"); //只支持windows系統 bw.newLine(); //跨平臺的 } br.close(); bw.close();
package com.heima.chario; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Demo4_Buffered { /** * @param args * 帶緩衝區的流中的特殊方法 * readLine() * newLine(); * * newLine()與\r\n的區別 * newLine()是跨平臺的方法 * \r\n只支持的是windows系統 * @throws IOException */ public static void main(String[] args) throws IOException { //demo1(); BufferedReader br = new BufferedReader(new FileReader("zzz.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("aaa.txt")); String line; while((line = br.readLine()) != null) { bw.write(line); //bw.newLine(); //寫出回車換行符 //bw.write("\r\n"); } br.close(); bw.close(); } public static void demo1() throws FileNotFoundException, IOException { BufferedReader br = new BufferedReader(new FileReader("zzz.txt")); String line; while((line = br.readLine()) != null) { System.out.println(line); } br.close(); } }
package com.heima.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; public class Test1 { /** * @param args * 將一個文本文檔上的文本反轉,第一行和倒數第一行交換,第二行和倒數第二行交換 * * 分析: * 1,建立輸入輸出流對象 * 2,建立集合對象 * 3,將讀到的數據存儲在集合中 * 4,倒着遍歷集合將數據寫到文件上 * 5,關流 * @throws IOException * * 注意事項: * 流對象儘可能晚開早關 */ public static void main(String[] args) throws IOException { //改寫後是儘可能晚開早關 // 1,建立輸入輸出流對象 BufferedReader br = new BufferedReader(new FileReader("zzz.txt")); //2,建立集合對象 ArrayList<String> list = new ArrayList<>(); //3,將讀到的數據存儲在集合中 String line; while((line = br.readLine()) != null) { list.add(line); } br.close(); //關流 //4,倒着遍歷集合將數據寫到文件上 BufferedWriter bw = new BufferedWriter(new FileWriter("revzzz.txt")); for(int i = list.size() - 1; i >= 0; i--) { bw.write(list.get(i)); bw.newLine(); } //5,關流 bw.close(); } }
LineNumberReader lnr = new LineNumberReader(new FileReader("aaa.txt")); String line; lnr.setLineNumber(100); //設置行號 while((line = lnr.readLine()) != null) { System.out.println(lnr.getLineNumber() + ":" + line);//獲取行號 } lnr.close();
package com.heima.chario; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class Demo5_LineNumberReader { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { LineNumberReader lnr = new LineNumberReader(new FileReader("zzz.txt")); String line; lnr.setLineNumber(100); while((line = lnr.readLine()) != null) { System.out.println(lnr.getLineNumber() + ":" + line); } lnr.close(); } }
interface Coder { public void code(); } class Student implements Coder { @Override public void code() { System.out.println("javase"); System.out.println("javaweb"); } } class HeiMaStudent implements Coder { private Student s; //獲取到被包裝的類的引用 public HeiMaStudent(Student s) { //經過構造函數建立對象的時候,傳入被包裝的對象 this.s = s; } @Override public void code() { //對其原有功能進行升級 s.code(); System.out.println("數據庫"); System.out.println("ssh"); System.out.println("安卓"); System.out.println("....."); } }
package com.heima.chario; public class Demo6_Wrap { /** * @param args * 裝飾設計模式的好處是: * 耦合性不強,被裝飾的類的變化與裝飾類的變化無關 */ public static void main(String[] args) { HeiMaStudent hms = new HeiMaStudent(new Student()); hms.code(); } } interface Coder { public void code(); } class Student implements Coder { @Override public void code() { System.out.println("javase"); System.out.println("javaweb"); } } class HeiMaStudent implements Coder { //1,獲取被裝飾類的引用 private Student s; //獲取學生引用 //2,在構造方法中傳入被裝飾類的對象 public HeiMaStudent(Student s) { this.s = s; } //3,對原有的功能進行升級 @Override public void code() { s.code(); System.out.println("ssh"); System.out.println("數據庫"); System.out.println("大數據"); System.out.println("..."); } }
BufferedReader br = //高效的用指定的編碼表讀 new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8")); BufferedWriter bw = //高效的用指定的編碼表寫 new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK")); int ch; while((ch = br.read()) != -1) { bw.write(ch); } br.close(); bw.close();
package com.heima.chario; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; public class Demo7_TransIO { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //demo1(); //demo2(); BufferedReader br = //更高效的讀 new BufferedReader(new InputStreamReader(new FileInputStream("utf-8.txt"), "utf-8")); BufferedWriter bw = //更高效的寫 new BufferedWriter(new OutputStreamWriter(new FileOutputStream("gbk.txt"), "gbk")); int c; while((c = br.read()) != -1) { bw.write(c); } br.close(); bw.close(); } public static void demo2() throws UnsupportedEncodingException, FileNotFoundException, IOException { InputStreamReader isr = new InputStreamReader(new FileInputStream("utf-8.txt"), "uTf-8"); //指定碼錶讀字符 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"), "gbk"); //指定碼錶寫字符 int c; while((c = isr.read()) != -1) { osw.write(c); } isr.close(); osw.close(); } public static void demo1() throws FileNotFoundException, IOException { //用默認編碼表讀寫,出現亂碼 FileReader fr = new FileReader("utf-8.txt"); FileWriter fw = new FileWriter("gbk.txt"); int c; while((c = fr.read()) != -1) { fw.write(c); } fr.close(); fw.close(); } }
package com.heima.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; public class Test2 { /** * @param args * 獲取一個文本上每一個字符出現的次數,將結果寫在times.txt上 * * 1,建立帶緩衝區的輸入流對象 * 2,建立雙列集合對象,目的是把字符看成鍵,把字符出現的次數看成值 * 3,經過讀取不斷向集合中存儲,存儲的時候要判斷,若是不包含這個鍵就將鍵和值爲1存儲,若是包含就將鍵和值加1存儲 * 4,關閉輸入流 * 5,建立輸出流對象 * 6,將結果寫出 * 7,關閉輸出流 * @throws IOException */ public static void main(String[] args) throws IOException { //1,建立帶緩衝區的輸入流對象 BufferedReader br = new BufferedReader(new FileReader("zzz.txt")); //2,建立雙列集合對象,目的是把字符看成鍵,把字符出現的次數看成值 HashMap<Character, Integer> hm = new HashMap<>(); //3,經過讀取不斷向集合中存儲,存儲的時候要判斷,若是不包含這個鍵就將鍵和值爲1存儲,若是包含就將鍵和值加1存儲 int c; while((c = br.read()) != -1) { char ch = (char)c; /*if(!hm.containsKey(ch)) { hm.put(ch, 1); }else { hm.put(ch, hm.get(ch) + 1); }*/ hm.put(ch, !hm.containsKey(ch)? 1 : hm.get(ch) + 1); } //4,關閉輸入流 br.close(); //5,建立輸出流對象 BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt")); //6,將結果寫出 for (Character key : hm.keySet()) { bw.write(key + "=" + hm.get(key)); } bw.close(); } }
package com.heima.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.TreeMap; public class Test3 { /** * 獲取一個文本上每一個字符出現的次數,將結果寫在times.txt上 * * 分析: * 1,建立帶緩衝的輸入流對象 * 2,建立雙列集合對象TreeMap * 3,將讀到的字符存儲在雙列集合中,存儲的時候要作判斷,若是不包含這個鍵,就將鍵和1存儲,若是包含這個鍵,就將該鍵和值加1存儲 * 4,關閉輸入流 * 5,建立輸出流對象 * 6,遍歷集合將集合中的內容寫到times.txt中 * 7,關閉輸出流 * @throws IOException */ public static void main(String[] args) throws IOException { //1,建立帶緩衝的輸入流對象 BufferedReader br = new BufferedReader(new FileReader("zzz.txt")); //2,建立雙列集合對象TreeMap TreeMap<Character, Integer> tm = new TreeMap<>(); //3,將讀到的字符存儲在雙列集合中,存儲的時候要作判斷,若是不包含這個鍵,就將鍵和1存儲,若是包含這個鍵,就將該鍵和值加1存儲 int ch; while((ch = br.read()) != -1) { char c = (char)ch; //強制類型轉換 /*if(!tm.containsKey(c)) { tm.put(c, 1); }else { tm.put(c, tm.get(c) + 1); }*/ tm.put(c, !tm.containsKey(c) ? 1 : tm.get(c) + 1); } //4,關閉輸入流 br.close(); //5,建立輸出流對象 BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt")); //6,遍歷集合將集合中的內容寫到times.txt中 for(Character key : tm.keySet()) { switch (key) { case '\t': bw.write("\\t" + "=" + tm.get(key)); break; case '\n': bw.write("\\n" + "=" + tm.get(key)); break; case '\r': bw.write("\\r" + "=" + tm.get(key)); break; default: bw.write(key + "=" + tm.get(key)); //寫出鍵和值 break; } bw.newLine(); } //7,關閉輸出流 bw.close(); } }
package com.heima.test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test4 { /** * 當咱們下載一個試用版軟件,沒有購買正版的時候,每執行一次就會提醒咱們還有多少次使用機會用學過的IO流知識,模擬試用版軟件, * 試用10次機會,執行一次就提示一次您還有幾回機會,若是次數到了提示請購買正版 * @throws IOException * 分析: * 1,建立帶緩衝的輸入流對象,由於要使用readLine方法,能夠保證數據的原樣性 * 2,將讀到的字符串轉換爲int數 * 3,對int數進行判斷,若是大於0,就將其--寫回去,若是不大於0,就提示請購買正版 * 4,在if判斷中要將--的結果打印,並將結果經過輸出流寫到文件上 */ public static void main(String[] args) throws IOException { //1,建立帶緩衝的輸入流對象,由於要使用readLine方法,能夠保證數據的原樣性 BufferedReader br = new BufferedReader(new FileReader("config.txt")); //2,將讀到的字符串轉換爲int數 String line = br.readLine(); int times = Integer.parseInt(line); //將數字字符串轉換爲數字 //3,對int數進行判斷,若是大於0,就將其--寫回去,若是不大於0,就提示請購買正版 if(times > 0) { //4,在if判斷中要將--的結果打印,並將結果經過輸出流寫到文件上 System.out.println("您還有" + times-- + "次機會"); FileWriter fw = new FileWriter("config.txt"); fw.write(times + ""); fw.close(); }else { System.out.println("您的試用次數已到,請購買正版"); } //關閉流 br.close(); } }
package com.heima.chario; public class Demo8_Digui { /** * @param args * 遞歸:方法本身調用本身 * 5! * 5 * 4 * 3 * 2 * 1 * * 5 * fun(4)(表明4!) * 4 * fun(3)(表明3!) * 3 * fun(2)(表明2!) * 2 * fun(1)(表明1!) * 遞歸的弊端:不能調用次數過多,容易致使棧內存溢出 * 遞歸的好處:不用知道循環次數 * * 構造方法是否能夠遞歸調用? * 構造方法不能使用遞歸調用 * * 遞歸調用是否必須有返回值? * 不必定(能夠有,也能夠沒有) */ public static void main(String[] args) { /*int result = 1; for(int i = 1; i <= 5; i++) { result = result * i; } System.out.println(result);*/ System.out.println(fun(6000)); } public static int fun(int num) { if(num == 1) { return 1; }else { return num * fun(num - 1); } } }
package com.heima.test; import java.io.File; import java.io.FileReader; import java.util.Scanner; public class Test5 { /** * 需求:從鍵盤輸入接收一個文件夾路徑,打印出該文件夾下全部的.java文件名 * * 分析: * 從鍵盤接收一個文件夾路徑 * 1,若是錄入的是不存在,給與提示 * 2,若是錄入的是文件路徑,給與提示 * 3,若是是文件夾路徑,直接返回 * * 打印出該文件夾下全部的.java文件名 * 1,獲取到該文件夾路徑下的全部的文件和文件夾,存儲在File數組中 * 2,遍歷數組,對每個文件或文件夾作判斷 * 3,若是是文件,而且後綴是.java的,就打印 * 4,若是是文件夾,就遞歸調用 */ public static void main(String[] args) { File dir = getDir(); printJavaFile(dir); } /* * 獲取鍵盤錄入的文件夾路徑 * 1,返回值類型File * 2,不須要有參數 */ public static File getDir() { Scanner sc = new Scanner(System.in); //建立鍵盤錄入對象 System.out.println("請輸入一個文件夾路徑"); while(true) { String line = sc.nextLine(); //將鍵盤錄入的文件夾路徑存儲 File dir = new File(line); //封裝成File對象 if(!dir.exists()) { System.out.println("您錄入的文件夾路徑不存在,請從新錄入"); }else if(dir.isFile()) { System.out.println("您錄入的是文件路徑,請從新錄入文件夾路徑"); }else { return dir; } } } /* * 獲取文件夾路徑下的所.java文件 * 1,返回值類型 void * 2,參數列表File dir */ public static void printJavaFile(File dir) { //1,獲取到該文件夾路徑下的全部的文件和文件夾,存儲在File數組中 File[] subFiles = dir.listFiles(); //2,遍歷數組,對每個文件或文件夾作判斷 for (File subFile : subFiles) { //3,若是是文件,而且後綴是.java的,就打印 if(subFile.isFile() && subFile.getName().endsWith(".java")) { System.out.println(subFile); //4,若是是文件夾,就遞歸調用 }else if (subFile.isDirectory()){ printJavaFile(subFile); } } } }