----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
IO操作涉及到的类较多,不过规律性也较强,通常可以通过三步实现IO操作。
1,明确源和目的。
源也就是输入流包括InputStream Reader 和他们的子类
目的也就是输出流包括OutputStream Writer和他们的子类。
2,判断操作的数据是否是纯文本(txt文件等)是:字符流。不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。通过设备来进行区分:源设备:内存,硬盘,键盘等。目的设备:内存,硬盘,控制台等。
举例,将一个文本文件中数据存储到另一个文件中。第一步明确目的和源。复制文件。源:因为是源,所以使用读取流InputStream或 Reader。2.判断是否是纯文本文件。明显是文本文件,这时就可以选择Reader这样体系就明确了。接下来明确要使用该体系中的哪个对象。
明确设备:硬盘。上一个文件。Reader体系中可以操作文件的对象是 FileReader是否需要提高效率:但为了提高读写效率。
加入Reader体系中缓冲区BufferedReader中。 代码为:FileReader fr = new FileReader("a.txt");BufferedReader bufr = new BufferedReader(fr);
这里的BufferedReader可以理解为在FileReader的小管道外套上BufferedReader,这样因为有缓冲区,所以可以调用readLine()方法,直接读取一行数据。
同样目的设备也可以这样分析。
字符流的传输效率比字节流的高,例如在控制台输入英文时,可以按照字符的读取来读取输入,如果能用readline()方法来读取数据效率就更高了,这时就需要用到转换流将,将字节转换成字符流。由于字符流使用Unicode字符集,支持很多个国家的编码,因此若流要跨越多种平台传输,应使用字符流。
下面是用字符流接受控制台输入的实现。
class streamToReader{
public static void main(String[] args) throws IOException
{
System.setIn(new FileInputStream("E:\\class\\copy.java"));
System.setOut(new PrintStream("abc.txt"));
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------