Java 閱讀器和寫入器

2018-02-07 20:00 更新

Java IO教程 - Java閱讀器和寫入器


Java閱讀器和寫入器是基于字符的流。

當我們要從數(shù)據(jù)源讀取基于字符的數(shù)據(jù)時,使用讀取器。當我們想要寫基于字符的數(shù)據(jù)時使用寫入器。

如果我們有一個流提供字節(jié),我們想通過將這些字節(jié)解碼為字符讀取字符,我們應該使用InputStreamReader類。

例如,如果我們有一個名為iso的InputStream對象,并且我們想要獲取一個Reader對象實例,我們可以這樣做:

Reader  reader = new InputStreamReader(iso);

如果我們知道在基于字節(jié)的流中使用的編碼,我們可以在創(chuàng)建Reader對象時指定它,如下所示:

Reader  reader = new InputStreamReader(iso,  "US-ASCII");

類似地,我們可以創(chuàng)建一個Writer對象,從基于字節(jié)的輸出流中吐出字符,如下所示,假設oso是一個OutputStream對象:

以下代碼使用平臺默認編碼從OutputStream創(chuàng)建Writer對象。

Writer writer  = new OutputStreamWriter(oso);

使用“US-ASCII"編碼從OutputStream創(chuàng)建Writer對象

Writer writer  = new OutputStreamWriter(oso,  "US-ASCII");

樣本

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Main {
  public static void main(String[] args) {
    String destFile = "test.txt";

    try (BufferedWriter bw = new BufferedWriter(new FileWriter(destFile))) {
      bw.append("test");
      bw.newLine();
      bw.append("test1");
      bw.newLine();
      bw.append("test2");
      bw.newLine();
      bw.append("test3");
      
      bw.flush();
    }  catch (Exception e2) {
      e2.printStackTrace();
    }
  }
}

以下代碼從test.txt文件中讀取文本。

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
  public static void main(String[] args) throws Exception{
    String srcFile = "test.txt";
    BufferedReader br = new BufferedReader(new FileReader(srcFile));
    String text = null;

    while ((text = br.readLine()) != null) {
      System.out.println(text);
    }
    br.close();
  }
}

將基于字節(jié)的流轉(zhuǎn)換為基于字符的流是直接的。

如果我們有一個InputStream對象,我們可以通過將它包裝在InputStreamReader對象中來獲取一個Reader對象,如下所示:

InputStream is = create your  InputStream object here; 
Reader  reader = new InputStreamReader(is);

要從InputStream對象構(gòu)造BufferedReader對象,我們可以這樣做:

InputStream is = create your  InputStream object here; 
BufferedReader br  = new BufferedReader(new InputStreamReader(is));

我們可以從OutputStream對象構(gòu)造一個Writer對象,如下所示:

OutputStream os  = create your  OutputStream object here; Writer writer  = new OutputStreamWriter(os);

例子

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.Reader;
import java.io.FilterReader;
import java.io.IOException;

class LowerCaseReader extends FilterReader {
  public LowerCaseReader(Reader in) {
    super(in);
  }
  @Override
  public int read(char[] cbuf, int off, int len) throws IOException {
    int count = super.read(cbuf, off, len);
    if (count != -1) {
      // Convert all read characters to lowercase 
      int limit = off + count;
      for (int i = off; i < limit; i++) {
        cbuf[i] = Character.toLowerCase(cbuf[i]);
      }
    }
    return count;
  }
}
public class Main {
  public static void main(String[] args) throws Exception {
    String fileName = "test.txt";
    LowerCaseReader lcr = new LowerCaseReader(new FileReader(fileName));
    int c = -1;
    while ((c = lcr.read()) != -1) {
      System.out.print((char) c);
    }
    lcr.close();
    BufferedReader br = new BufferedReader(new LowerCaseReader(new FileReader(
        fileName)));
    String str = null;
    while ((str = br.readLine()) != null) {
      System.out.println(str);
    }
    br.close();
  }
}

上面的代碼生成以下結(jié)果。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號