1. 程式人生 > >Java IO如何讀寫文件

Java IO如何讀寫文件

writer 中文 dwr buffer 串流 輸入 ioe tput 字符

  Java把這些不同來源和目標的數據都統一抽象為數據流;Java語言的輸入輸出功能是十分強大而靈活的;在Java類庫中,IO部分的內容是很龐大的,因為它涉及的領域很廣泛:標準輸入輸出,文件的操作,網絡上的數據流,字符串流,對象流,zip文件流。

  這裏介紹幾種讀寫文件的方式:

一、InputStream、OutputStream(字節流)

//讀取文件(字節流)
InputStream in = new FileInputStream("d:\\1.txt");
//寫入相應的文件
OutputStream out = new FileOutputStream("d:\\2.txt");
//讀取數據
//一次性取多少字節 byte[] bytes = new byte[2048]; //接受讀取的內容(n就代表的相關數據,只不過是數字的形式) int n = -1; //循環取出數據 while ((n = in.read(bytes,0,bytes.length)) != -1) { //轉換成字符串 String str = new String(bytes,0,n,"GBK"); #這裏可以實現字節到字符串的轉換,比較實用 System.out.println(str); //寫入相關文件 out.write(bytes, 0, n); } //關閉流 in.close(); out.close();

二、BufferedInputStream、BufferedOutputStream(緩存字節流)使用方式和字節流差不多,但是效率更高(推薦使用)

//讀取文件(緩存字節流)
BufferedInputStream in = new BufferedInputStream(new FileInputStream("d:\\1.txt"));
//寫入相應的文件
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\\2.txt"));
//讀取數據
//一次性取多少字節
byte[] bytes = new
byte[2048]; //接受讀取的內容(n就代表的相關數據,只不過是數字的形式) int n = -1; //循環取出數據 while ((n = in.read(bytes,0,bytes.length)) != -1) { //轉換成字符串 String str = new String(bytes,0,n,"GBK"); System.out.println(str); //寫入相關文件 out.write(bytes, 0, n); } //清楚緩存 out.flush(); //關閉流 in.close(); out.close();

三、InputStreamReader、OutputStreamWriter(字節流,這種方式不建議使用,不能直接字節長度讀寫)。使用範圍用做字符轉換

//讀取文件(字節流)
InputStreamReader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
//寫入相應的文件
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("d:\\2.txt"));
//讀取數據
//循環取出數據
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read()) != -1) {
    System.out.println(len);
    //寫入相關文件
    out.write(len);
}
//清楚緩存
out.flush();
//關閉流
in.close();
out.close();

四、FileReader、FileWriter(提供少量的文本讀取和寫入文本)

try{
    //使用FileWriter類寫文本文件
    FileWriter writer=new FileWriter(fileName);
    writer.write("Hello Kuka:\n");
    writer.write("  My name is coolszy!\n");
    writer.write("  I like you and miss you。");
    writer.close();
} catch (IOException e){
    e.printStackTrace();
}

try{
    //使用FileWriter類往文本文件中追加信息
    FileWriter writer = new FileWriter(fileName, true);
    SimpleDateFormat format = new SimpleDateFormat();
    String time = format.format(new Date());
    writer.write("\n\t" + time);
    writer.close();
} catch(IOException e){
    e.printStackTrace();
}

int c=0;
try{
    //使用FileReader類讀文本文件
    FileReader reader=new FileReader(fileName);
    c=reader.read();
    while(c!=-1) {
        System.out.print((char)c);
        c=reader.read();
    }
    reader.close();
} catch (Exception e) {
    e.printStackTrace();
}

五、BufferedReader、BufferedWriter(緩存流,提供readLine方法讀取一行文本)

//讀取文件(字符流)
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK"));#這裏主要是涉及中文
//BufferedReader in = new BufferedReader(new FileReader("d:\\1.txt")));
//寫入相應的文件
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\2.txt"),"GBK"));
//BufferedWriter out = new BufferedWriter(new FileWriter("d:\\2.txt"));
//讀取數據
//循環取出數據
String str = null;
while ((str = in.readLine()) != null) {
    System.out.println(str);
    //寫入相關文件
    out.write(str);
    out.newLine();  //註意\n不一定在各種計算機上都能產生換行的效果
} //清楚緩存 out.flush(); //關閉流 in.close(); out.close();

六、Reader、PrintWriter(PrintWriter這個很好用,在寫數據的同事可以格式化)

//讀取文件(字節流)
Reader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
//寫入相應的文件
PrintWriter out = new PrintWriter(new FileWriter("d:\\2.txt"));
//讀取數據
//循環取出數據
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read()) != -1) {
    System.out.println(len);
    //寫入相關文件
    out.write(len);
}
//清楚緩存
out.flush();
//關閉流
in.close();
out.close();

Java IO如何讀寫文件