Java IO流及应用(一)
IO流
- IO流概述及FileWriter類的使用
- FileReader類使用
- 緩沖流介紹和使用
- IO流相關案例
NO.one IO流概述及FileWriter類使用
?
1.1 IO流概述及分類
?? IO流用來處理設備之間的數據傳輸
?? Java對數據的操作是通過流的方式
?? Java用于操作流的類都在IO包中
? ??流按流向分為兩種:輸入流,輸出流
?
1.2 FileWriter類使用
A:打開幫助文檔
B:點擊顯示,找到索引,看到輸入框
C:你要學習什么內容,你就在框框里面輸入什么內容
? ? 舉例:Random
D:看包
??? java.lang包下的類在使用的時候是不需要導包的
E:看類的描述
? ? Random類是用于生成隨機數的類
F:看構造方法
???? Random():無參構造方法
????? Random r = new Random();
G:看成員方法
? ?? public int nextInt(int n):產生的是一個[0,n)范圍內的隨機數
????? 調用方法:
???????? ?????? 看返回值類型:人家返回什么類型,你就用什么類型接收
??????????????? 看方法名:名字不要寫錯了
??????????????? 看形式參數:人家要幾個參數,你就給幾個,人家要什么數據類型的,
??????????????? 你就給什么數據類型的
??????????????? int number = r.nextInt(100);
1.2.1 FileWriter向文件中寫數據
A:FileWriter向文件中寫數據操作步驟:
????? a:使用FileWriter流關聯文件
????? b:利用FileWriter的寫方法寫數據
????? c:利用FileWriter的刷新方法將數據從內存刷到硬盤上
????? d:利用FileWriter的關流方法將釋放占用的系統底層資源
B:FileWriter方法:
??? 構造方法
??? FileWriter(String fileName) 傳入一個文件的路徑
??? 成員方法
??? void write(String?str) 向文件中寫str
??? void flush()? 將內存中的數據刷新到文件中
??? void close()? 關流釋放系統底層資源
1.2.1.1 案例代碼一:
package com.gao_01; import java.io.FileWriter; import java.io.IOException;/** 需求:往文件中寫數據* 寫數據--輸出流--FileWriter* * FileWriter:* FileWriter(String fileName):傳遞一個文件名稱* * 輸出流寫數據的步驟:* A:創建輸出流對象* B:調用輸出流對象的寫數據的方法* C:釋放資源*/ public class FileWriterDemo {public static void main(String[] args) throws IOException {//創建輸出流對象FileWriter fw = new FileWriter("d:\\a.txt");/** 創建輸出流對象做了哪些事情:* A:調用系統資源創建了一個文件* B:創建輸出流對象* C:把輸出流對象指向文件*///調用輸出流對象的寫數據的方法//寫一個字符串數據fw.write("IO流你好");//數據沒有直接寫到文件,其實是寫到了內存緩沖區 fw.flush();//釋放資源//通知系統釋放和該文件相關的資源 fw.close();//while(true) {} } }1.2.2 FileWriter 注意事項
1.2.2.1 案例代碼二:
package com.gao_01;import java.io.FileWriter; import java.io.IOException;/** 輸出流寫數據的步驟:* A:創建輸出流對象* B:調用輸出流對象的寫數據方法,并刷新緩沖區* C:釋放資源* * 相對路徑:相對當前項目而言的,在項目的根目錄下(a.txt)* 絕對路徑:以盤符開始的路徑(d:\\a.txt)* * close()和flush()方法的區別:* flush():刷新緩沖區。流對象還可以繼續使用。* close():先刷新緩沖區,然后通知系統釋放資源。流對象不可以再被使用了。*/ public class FileWriterDemo2 {public static void main(String[] args) throws IOException {//創建輸出流對象//FileWriter fw = new FileWriter("d:\\a.txt");FileWriter fw = new FileWriter("a.txt");//調用輸出流對象的寫數據方法,并刷新緩沖區fw.write("helloworld");fw.flush();fw.write("java");fw.flush();//釋放資源 fw.close();//Stream closed//fw.write("javaee");//fw.flush(); } }1.2.3 FileWriter 其他寫方法
void write(String str):寫一個字符串數據
void write(String str,int index,int len):寫一個字符串中的一部分數據
void write(int ch):寫一個字符數據,這里寫int類型的好處是既可以寫char類型的數據,
??????????????????????????? 也可以寫char對應的int類型的值。'a',97
void write(char[] chs):寫一個字符數組數據
void write(char[] chs,int index,int len):寫一個字符數組的一部分數據
1.2.3.1 案例代碼三:
package com.gao_01; import java.io.FileWriter; import java.io.IOException;/** void write(String str):寫一個字符串數據* void write(String str,int index,int len):寫一個字符串中的一部分數據* void write(int ch):寫一個字符數據,這里寫int類型的好處是既可以寫char類型的數據,也可以寫char對應的int類型的值。'a',97* void write(char[] chs):寫一個字符數組數據* void write(char[] chs,int index,int len):寫一個字符數組的一部分數據*/ public class FileWriterDemo3 {public static void main(String[] args) throws IOException {//創建輸出流對象FileWriter fw = new FileWriter("b.txt");//void write(String str):寫一個字符串數據//fw.write("abcde");//void write(String str,int index,int len):寫一個字符串中的一部分數據//fw.write("abcde",0,5);//fw.write("abcde",1,3);//void write(int ch):寫一個字符數據,這里寫int類型的好處是既可以寫char類型的數據,也可以寫char對應的int類型的值。'a',97//fw.write('a');//fw.write(97);//void write(char[] chs):寫一個字符數組數據char[] chs = {'a','b','c','d','e'};//fw.write(chs);//void write(char[] chs,int index,int len):寫一個字符數組的一部分數據//fw.write(chs,0,5);fw.write(chs,2,3);//釋放資源 fw.close();} }1.2.4 FileWriter 寫入換行以及向文本末尾追加
1.2.4.1 案例代碼四:
package com.gao_01;import java.io.FileWriter; import java.io.IOException;/** 如何實現數據的換行?* \n可以實現換行,但是windows系統自帶的記事本打開并沒有換行,這是為什么呢?因為windows識別的換行不是\n,而是\r\n* windows:\r\n* linux:\n* mac:\r* 如何實現數據的追加寫入?* FileWriter(String fileName, boolean append)*/ public class FileWriterDemo4 {public static void main(String[] args) throws IOException {//創建輸出流對象//FileWriter fw = new FileWriter("c.txt");FileWriter fw = new FileWriter("c.txt",true); //表示追加寫入,默認是falsefor(int x=0; x<10; x++) {fw.write("hello"+x);fw.write("\r\n");}//釋放資源 fw.close();} }NO.two FileReader類使用
2.1 FileReader 讀數據一次讀取一個字符
2.1.1 案例代碼五:
package com.gao_02; import java.io.FileReader; import java.io.IOException;/** 需求:從文件中讀數據并顯示到控制臺* 讀數據--輸入流--FileReader* * FileReader:* FileReader(String fileName):傳遞文件名稱* * 輸入流讀文件的步驟:* A:創建輸入流對象* B:調用輸入流對象的讀數據方法* C:釋放資源* * java.io.FileNotFoundException: fr.txt (系統找不到指定的文件。)*/ public class FileReaderDemo {public static void main(String[] args) throws IOException {//創建輸入流對象 // FileReader fr = new FileReader("fr.txt");FileReader fr = new FileReader("FileWriterDemo.java");//調用輸入流對象的讀數據方法//int read():一次讀取一個字符/*//第一次讀數據int ch = fr.read();System.out.println(ch);System.out.println((char)ch);//第二次讀數據ch = fr.read();System.out.println(ch);System.out.println((char)ch);//第三次讀數據ch = fr.read();System.out.println(ch);System.out.println((char)ch);//這是時候,我們發現代碼的重復度很高,想用循環改進,但是不知道循環的結束條件是什么ch = fr.read();System.out.println(ch);ch = fr.read();System.out.println(ch);//通過測試,我們知道,如果讀取數據的返回值是-1的時候,就說明沒有數據了,這也是我們循環的結束條件*/int ch;//1:fr.read()//2:ch=fr.read()//3:ch != -1while((ch=fr.read())!=-1) {//System.out.println(ch);//System.out.println((char)ch);System.out.print((char)ch);}//釋放資源 fr.close();} }2.2 利用FileReader 和 FileWriter完成文件復制
2.2.1 讀一次寫一次
2.2.1.1 案例代碼六:
package com.gao_03; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 需求:* 把項目路徑下的FileWriterDemo.java中的內容復制到項目路徑下的Copy.java中* * 文件復制也是有規律可循的,也就是說有套路。* * 數據源:* FileWriterDemo.java -- 讀數據 -- FileReader* 目的地:* Copy.java -- 寫數據 -- FileWriter*/ public class CopyFileDemo {public static void main(String[] args) throws IOException {//創建輸入流對象FileReader fr = new FileReader("FileWriterDemo.java");//創建輸出流對象FileWriter fw = new FileWriter("Copy.java");//讀寫數據int ch;while((ch=fr.read())!=-1) {fw.write(ch);}//釋放資源 fw.close();fr.close();} }2.2.2 利用字符數組拷貝文件
2.2.2.1 案例代碼七:
package com.gao_03;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 需求:* 把項目路徑下的FileWriterDemo.java中的內容復制到項目路徑下的Copy.java中* * 數據源:* FileWriterDemo.java -- 讀數據 -- FileReader* 目的地:* Copy.java -- 寫數據 -- FileWriter*/ public class CopyFileDemo2 {public static void main(String[] args) throws IOException {//創建輸入流對象FileReader fr = new FileReader("FileWriterDemo.java");//創建輸出流對象FileWriter fw = new FileWriter("Copy.java");//讀寫數據char[] chs = new char[1024];int len;while((len=fr.read(chs))!=-1) {fw.write(chs, 0, len);}//釋放資源 fw.close();fr.close();} }2.2.3 拷貝文件的兩種方式圖解
NO.three 緩沖流介紹和使用
3.1 緩沖流的基本使用
3.1.1 案例代碼八:
package com.gao_04;import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;/** BufferedWriter:將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入。 * BufferedReader:從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。*/ public class BufferedStreamDemo {public static void main(String[] args) throws IOException {//創建輸出緩沖流對象/*BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));bw.write("hello");//bw.flush();bw.close();*///創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));/*//一次讀寫一個字符int ch;while((ch=br.read())!=-1){System.out.print((char)ch);}*///一次讀寫一個字符數組char[] chs = new char[1024];int len;while((len=br.read(chs))!=-1) {System.out.print(new String(chs,0,len));}//釋放資源 br.close();} }3.2 緩沖流復制文本文件的兩種方式
利用緩沖流把項目路徑下的FileWriterDemo.java中的內容復制到項目路徑下的Copy.java中
? 第一種方式:使用緩沖流不使用字符數組
? 第二種方式:使用緩沖流使用字符數組
3.2.1 案例代碼九:
package com.gao_04;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 需求:* 把項目路徑下的FileWriterDemo.java中的內容復制到項目路徑下的Copy.java中* * 數據源:* FileWriterDemo.java -- 讀數據 -- FileReader -- 高效的讀數據 -- BufferedReader* 目的地:* Copy.java -- 寫數據 -- FileWriter -- 高效的寫數據 -- BufferedWriter*/ public class CopyFileDemo {public static void main(String[] args) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));//讀寫數據/*//一次讀寫一個字符int ch;while((ch=br.read())!=-1) {bw.write(ch);}*///一次讀寫一個字符數組char[] chs = new char[1024];int len;while((len=br.read(chs))!=-1) {bw.write(chs,0,len);}//釋放資源 bw.close();br.close();} }3.3 緩沖流的特有方法使用
BufferedWriter
void newLine():寫一個換行符,這個換行符由系統決定,不同的操作系統newLine()方法使用的換行符不同
windows: \r\n
linux: \n
mac: \r
?BufferedReader
??????? String readLine():一次讀取一行數據,但是不讀取換行符
3.3.1 案例代碼十:
package com.gao_05; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;/** 緩沖流的特殊功能:* BufferedWriter* void newLine():寫一個換行符,這個換行符由系統決定* BufferedReader* String readLine():一次讀取一行數據,但是不讀取換行符*/ public class BufferedStreamDemo {public static void main(String[] args) throws IOException {/*BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt"));for(int x=0; x<10; x++) {bw.write("hello"+x);//bw.write("\r\n");bw.newLine();bw.flush();}bw.close();*/BufferedReader br = new BufferedReader(new FileReader("br.txt"));/*String line = br.readLine();System.out.println(line);line = br.readLine();System.out.println(line);line = br.readLine();System.out.println(line);line = br.readLine();System.out.println(line);*/String line;//1:br.readLine()//2:line=br.readLine()//3:line != nullwhile((line=br.readLine())!=null) {System.out.println(line);}br.close();} }3.4 緩沖流的特有方法復制文件
3.4 案例代碼十一:
package com.gao_05; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** 需求:* 把項目路徑下的FileWriterDemo.java中的內容復制到項目路徑下的Copy.java中* * 數據源:* FileWriterDemo.java -- 讀數據 -- FileReader -- 高效的讀數據 -- BufferedReader* 目的地:* Copy.java -- 寫數據 -- FileWriter -- 高效的寫數據 -- BufferedWriter*/ public class CopyFileDemo {public static void main(String[] args) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));//讀寫數據 String line;while((line=br.readLine())!=null) {bw.write(line);bw.newLine();bw.flush();}//釋放資源 bw.close();br.close();} }NO.four IO流相關案例
4.1 復制文本文件的5中方式
A:利用基本流一次讀寫一個字符
B:利用基本流一次讀寫一個字符數組
C:利用緩沖流一次讀寫一個字符
D:利用緩沖流一次讀寫一個字符數組
E:利用緩沖流的特有方法一次讀寫一個字符串
4.1.1 案例代碼十二:
package com.gao_06;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 復制文本文件(5種方式)* * 數據源:* FileWriterDemo.java* 目的地:* Copy.java*/ public class CopyFileTest {public static void main(String[] args) throws IOException {/*method1("FileWriterDemo.java","Copy.java");method2("FileWriterDemo.java","Copy.java");method3("FileWriterDemo.java","Copy.java");method4("FileWriterDemo.java","Copy.java");method5("FileWriterDemo.java","Copy.java");*/String srcFileName = "FileWriterDemo.java";String destFileName = "Copy.java";// method1(srcFileName,destFileName); // method2(srcFileName,destFileName); method3(srcFileName,destFileName); // method4(srcFileName,destFileName); // method5(srcFileName,destFileName); }//緩沖流一次讀寫一個字符串public static void method5(String srcFileName,String destFileName) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader(srcFileName));//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));//一次讀寫一個字符串 String line;while((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//釋放資源 bw.close();br.close();}//緩沖流一次讀寫一個字符數組public static void method4(String srcFileName,String destFileName) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader(srcFileName));//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));//一次讀寫一個字符數組char[] chs = new char[1024];int len;while((len=br.read(chs))!=-1) {bw.write(chs,0,len);}//釋放資源 bw.close();br.close();}//緩沖流一次讀寫一個字符public static void method3(String srcFileName,String destFileName) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader(srcFileName));//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));//一次讀寫一個字符int ch;while((ch=br.read())!=-1) {bw.write(ch);}//釋放資源 bw.close();br.close();}//基本流一次讀寫一個字符數組public static void method2(String srcFileName,String destFileName) throws IOException {//創建輸入流對象FileReader fr = new FileReader(srcFileName);//創建輸出流對象FileWriter fw = new FileWriter(destFileName);//一次讀寫一個字符數組char[] chs = new char[1024];int len;while((len=fr.read(chs))!=-1) {fw.write(chs,0,len);}//釋放資源 fw.close();fr.close();}//基本流一次讀寫一個字符public static void method1(String srcFileName,String destFileName) throws IOException {//創建輸入流對象FileReader fr = new FileReader(srcFileName);//創建輸出流對象FileWriter fw = new FileWriter(destFileName);//一次讀寫一個字符int ch;while((ch=fr.read())!=-1) {fw.write(ch);}//釋放資源 fw.close();fr.close();} }4.2 把集合中的數據寫到文本文件
把ArrayList集合中的字符串數據存儲到文本文件項目根目下的array.txt中
每一個字符串元素作為文件中的一行數據
4.2.1 案例代碼十三:
package com.gao_06;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList;/** 把ArrayList集合中的字符串數據存儲到文本文件* 每一個字符串元素作為文件中的一行數據* * 分析:* A:創建集合對象* B:往集合中添加字符串元素* C:創建輸出緩沖流對象* D:遍歷集合,得到每一個字符串元素,然后把該字符串元素作為數據寫到文本文件* E:釋放資源*/ public class ArrayListToFileTest {public static void main(String[] args) throws IOException {//創建集合對象ArrayList<String> array = new ArrayList<String>();//往集合中添加字符串元素array.add("hello");array.add("world");array.add("java");//創建輸出緩沖流對象BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));//遍歷集合,得到每一個字符串元素,然后把該字符串元素作為數據寫到文本文件for(int x=0; x<array.size(); x++) {String s = array.get(x);bw.write(s);bw.newLine();bw.flush();}//釋放資源 bw.close();} }4.3 把文本文件中的數據讀取到集合
從項目根目錄下的array.txt文本文件中讀取數據到ArrayList集合中,并遍歷集合,每一行數據作為一個字符串元素
4.3.1 案例代碼十四:
package com.gao_06; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList;/** 從文本文件中讀取數據到ArrayList集合中,并遍歷集合* 每一行數據作為一個字符串元素* * 分析:* A:創建輸入緩沖流對象* B:創建集合對象* C:讀取數據,每次讀取一行數據,把該行數據作為一個元素存儲到集合中* D:釋放資源* E:遍歷集合*/ public class FileToArrayListTest {public static void main(String[] args) throws IOException {//創建輸入緩沖流對象BufferedReader br = new BufferedReader(new FileReader("array.txt"));//創建集合對象ArrayList<String> array = new ArrayList<String>();//讀取數據,每次讀取一行數據,把該行數據作為一個元素存儲到集合中 String line;while((line=br.readLine())!=null) {array.add(line);}//釋放資源 br.close();//遍歷集合for(int x=0; x<array.size(); x++) {String s = array.get(x);System.out.println(s);}} }?
轉載于:https://www.cnblogs.com/yoke/p/7440669.html
總結
以上是生活随笔為你收集整理的Java IO流及应用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 板邓:PHP获取当前页面url地址、参数
- 下一篇: 面向面试编程?
