Java中的I/O

輸出流寫文件

package Test10;

import java.io.FileWriter;
import java.io.IOException;

/*
 * FileWriter:
 *          FileWriter(String fileName):傳遞一個文件名稱
 * 
 * 輸出流寫文件的步驟:
 *          1.創建輸出流對象
 *          2.調用輸出流寫對象的方法
 *          3.釋放資源
 * 
 * 相對路徑:在項目的根目錄下
 * 絕對路徑:在指定盤中
 */
public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //創建輸出流對象
        FileWriter fw = new FileWriter("d:\\a.txt");//絕對路徑
        FileWriter fw2 = new FileWriter("a.txt");//相對路徑

        //調用輸出流寫對象的方法
        fw.write("hello");
        fw.flush();//刷新緩存區

        fw.write("world");
        fw.flush();//刷新緩存區

        //釋放資源
        fw.close();//其實close在釋放前也會刷新一次緩存區,適用於數據較少時

    }
}

寫數據的五種方法

package Test10;

import java.io.FileWriter;
import java.io.IOException;

/*
 * 寫數據的五種方法:
 *          1.void write(String str):寫一個字符串數據
 *          2.void write(String str,int index,int len):寫一個字符串中從索引index開始共len個字符
 *          3.void write(int chs):寫一個字符數據,這裏的int其實是既可以寫char類型的字符,也可以寫char對應的int的數值,例如:'a'-97
 *          4.void write(char[] chs,int index,int len):寫一個字符數組中從索引index開始共len個字符
 * 
 * 數據的換行:
 *          1.Windows:\r\n
 *          2.linux:\n
 *          3.mac:\r
 * 
 * 數據的追加寫入:
 *          FileWriter(String fileName,boolean append):不寫true,則默認爲flase,flase就是每次重新執行程序寫數據就會把上次寫的數據覆蓋
 */
public class FileWriterDemo2 {
    public static void main(String[] args) throws IOException {
        //創建輸出流對象
        FileWriter fw = new FileWriter("b.txt",true);

        //寫一個字符串數據
        fw.write("hello");
        fw.write("\r\n");
        fw.flush();

        //寫一個字符串中從索引index開始共len個字符
        fw.write("helloworld",2,5);
        fw.write("\r\n");
        fw.flush();

        //寫一個字符數據,這裏的int其實是既可以寫char類型的字符,也可以寫char對應的int的數值,例如:'a'-97
        fw.write('a');
        fw.write(97);
        fw.write("\r\n");
        fw.flush();

        //寫一個字符數組中從索引index開始共len個字符
        char[] chs = {'h','e','l','l','o'};
        fw.write(chs,2,2);
        fw.write("\r\n");
        fw.flush();

        //釋放資源
        fw.close();
    }
}

輸入流讀文件

package Test10;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/*
 * FileReader:
 *          FileReader(String flieName):傳遞一個文件名稱
 * 
 * 輸入流讀文件的步驟:
 *          1.創建輸入流對象
 *          2.調用輸入流對象讀數據的方法
 *          3.釋放資源
 * 
 * 讀文件的方法:
 *          1.一次讀一個字符
 *          2.一次讀一個字符數組
 */
public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        //創建輸入流對象
        FileReader fr = new FileReader("b.txt");

        //調用輸入流對象讀數據的方法:一次讀一個字符
        int ch;
        while((ch=fr.read()) != -1){
            System.out.print((char)ch);//不用加ln,因爲讀的時候換行符也會被讀
        }


        //調用輸入流對象讀數據的方法:一次讀一個字符數組
        char[] chs = new char[1024];
        int len;
        while((len = fr.read(chs)) != -1){
            System.out.println(new String(chs,0,len));
        }

    }
}

複製文件的五種方式

package Test10;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 複製文件的五種方式
 * 
 * 步驟:
 *      1.從b.txt文件中讀取數據
 *      2.將數據寫到copy,tet文件中
 */
public class CopyFileTest {
    public static void main(String[] args) throws IOException {
        String fileReadName = "b.txt";
        String fileWriteName = "copy.txt";

        method1(fileReadName,fileWriteName);
//      method2(fileReadName,fileWriteName);
//      method3(fileReadName,fileWriteName);
//      method4(fileReadName,fileWriteName);
//      method5(fileReadName,fileWriteName);

    }
    //基本流一次讀寫一個字符
    public static void method1(String fileReadName,String fileWriteName) throws IOException{
        //創建輸入流對象
        FileReader fr = new FileReader(fileReadName);

        //創建輸出流對象
        FileWriter fw = new FileWriter(fileWriteName);

        //基本流一次讀寫一個字符
        int ch;
        while((ch=fr.read()) != -1){
            fw.write(ch);
        }

        //釋放資源
        fw.close();
        fr.close();
    }
    //基本流一次讀寫一個字符數組
    public static void method2(String fileReadName,String fileWriteName) throws IOException{
        //創建輸入流對象
        FileReader fr = new FileReader(fileReadName);

        //創建輸出流對象
        FileWriter fw = new FileWriter(fileWriteName);

        //基本流一次讀寫一個字符數組
        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 method3(String fileReadName,String fileWriteName) throws IOException{
        //創建輸入緩衝流對象
        FileReader fr = new FileReader(fileReadName);
        BufferedReader br = new BufferedReader(fr);

        //創建輸出緩衝流對象
        FileWriter fw = new FileWriter(fileWriteName);
        BufferedWriter bw = new BufferedWriter(fw);

        int ch;
        while((ch=br.read()) != -1){
            bw.write(ch);
        }

        //釋放資源
        bw.close();
        br.close();
    }
    //緩衝流一次讀寫一個字符數組
    public static void method4(String fileReadName,String fileWriteName) throws IOException{
        //創建輸入緩衝流對象
        FileReader fr = new FileReader(fileReadName);
        BufferedReader br = new BufferedReader(fr);

        //創建輸出緩衝流對象
        FileWriter fw = new FileWriter(fileWriteName);
        BufferedWriter bw = new BufferedWriter(fw);

        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 method5(String fileReadName,String fileWriteName) throws IOException{
        //創建輸入緩衝流對象
        FileReader fr = new FileReader(fileReadName);
        BufferedReader br = new BufferedReader(fr);

        //創建輸出緩衝流對象
        FileWriter fw = new FileWriter(fileWriteName);
        BufferedWriter bw = new BufferedWriter(fw);

        //readLine():一次讀取一行數據,但是不讀取換行符
        String str;
        while((str=br.readLine()) != null){
            bw.write(str);
            bw.newLine(); //寫一個換行符,由系統決定
        }

        //釋放資源
        bw.close();
        br.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章