Java标准I/O的概念
2014-04-07 00:15
197 查看
// 当程序读写文件时,在读写完毕后,就会及时关闭输入流和输出流,这些输入流和输出流对象的
// 生命周期是短暂的,不会存在于程序运行的整个生命周期中,对于某些应用程序,需要在程序运行
// 的整个生命周期中,从同一个数据源读入数据,或向同一个数据汇输出数据,最常见的就是一些日志
// 信息,以便用户能跟踪程序的运行状态
// 在JDK的java.lang.System类中,提供了三个静态变量:
// System.in,为InputStream类型,代表标准输入流,默认的数据源是键盘,程序可以通过System.in读取标准输入流的数据
// System.out,为printStream类型,代表标准输出流,默认的数据汇是控制台,程序可以通过System.out输出运行时的正常消息
// System.err,为printStream类型,代表标准错误输出流,默认的数据汇是控制台,程序可以通过System.err输出运行时的错误信息
// 以上三个是由java虚拟机创建的,存在于程序运行的整个生命周期中,这些流始终处于打开状态,除非程序显示的关闭他们,只要程序
// 没有关闭这些流,在程序运行的任何时候都可以通过他们来输入或输出数据
// 重新包装标准I/O
// System.in是InputStream类型,为了读取到格式化的数据,以及提高读数据的效率,需要对其进行包装,下面先用InputStreamReader适配器把System.in
// 转换为Reader类型,再用BufferedReader来装饰它。
// System.out是PrintStream类型,可以通过以下方式把它转换为PrintWriter类型
// 标准I/O重定向
// 默认时,标准输入流从键盘读取数据,标准输出流和标准错误输出流向控制台输出数据,System类提供了一些用于重定向流的静态方法
// setIn(InputStream in);对标准输入流重定向
// setOut(PrintStream out);对标准输出流重定向
// setErr(printStream out);对标准错误输出流重定向
// 有时候程序向控制台输出大量数据,由于输出数据滚动太快,会影响阅读,此时可以把标准输出流重定向到一个文件
// PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));
// 随机访问文件类:RandomAccessFile
// 无论是inputStream和OutputStream,还是Reader和Write,他们的共同点:只能按照数据的先后顺序读取数据源的数据,以及按照数据的先后顺序向数据汇写数据
// RandomAccessFile不属于流,它具有随机读写文件的功能,能从文件的任意位置开始执行读写操作,下面提供了定位文件位置的方法
// getFilePointer():返回当前读写指针所在的位置
// seek(long pos):设定读写指针的位置,与文件开头相隔pos个字节数
// skipBytes(int n):使读写指针从当前位置开始,跳过n个字节
// length():返回文件包含的字节数
// RandomAccessFile类实现了DataInput和DataOutput接口,因此能读写格式化数据,RandomAccessFile类提供了以下构造方法
// RandomAccessFile(File file,String mode);参数file指定被访问的文件
// RandomAccessFile(String name, String mode);参数name指定被访问的文件的路径
// 以上构造方法mode参数指定访问模式:可选值包括"r"和"rw",前者表示随机读模式,后者表示随机读写模式,注意:不支持只写文件模式,因此把mode设为"w"是非法的
public class Test19 {
public static void main(String[] args) throws Exception {
// InputStream inputStream = System.in;// 获取键盘输入的内容
// InputStreamReader reader = new InputStreamReader(inputStream);
// BufferedReader bufferedReader = new BufferedReader(reader);
// String data;
// while ((data = bufferedReader.readLine()) != null && data.length() != 0) {
// System.out.println("echo:" + data);
// }
// System.err.println("错误信息输出到控制台");
// System.out.println("普通信息输出到控制台");
// PrintWriter pw = new PrintWriter(System.out,true);
// pw.println("不爽");
// redirect();
RandomTest();
}
public static void redirect() throws Exception{
// 将所有的System.out信息输出到out.txt文件中
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));
System.setOut(out);
System.out.println("haha");
out.close();
// 再将System.out信息输出到默认的控制台
PrintStream pt = System.out;
System.setOut(pt);
System.out.println("gogo");
pt.close();
}
public static void RandomTest() throws Exception{
RandomAccessFile rf = new RandomAccessFile("D:\\test.dat", "rw");
for (int i = 0; i < 10; i++) {
rf.writeLong(i*1000);
}
rf.seek(5*8);//从文件开头开始,跳过5个long数据,接下来写第6个long数据,覆盖原来的第6个long数据
rf.writeLong(1234);
rf.seek(0);//把读指针定位到文件开头
for (int i = 0; i < 10; i++) {
System.out.println("Value"+i+":"+rf.readLong());
}
rf.close();
}
}
// 生命周期是短暂的,不会存在于程序运行的整个生命周期中,对于某些应用程序,需要在程序运行
// 的整个生命周期中,从同一个数据源读入数据,或向同一个数据汇输出数据,最常见的就是一些日志
// 信息,以便用户能跟踪程序的运行状态
// 在JDK的java.lang.System类中,提供了三个静态变量:
// System.in,为InputStream类型,代表标准输入流,默认的数据源是键盘,程序可以通过System.in读取标准输入流的数据
// System.out,为printStream类型,代表标准输出流,默认的数据汇是控制台,程序可以通过System.out输出运行时的正常消息
// System.err,为printStream类型,代表标准错误输出流,默认的数据汇是控制台,程序可以通过System.err输出运行时的错误信息
// 以上三个是由java虚拟机创建的,存在于程序运行的整个生命周期中,这些流始终处于打开状态,除非程序显示的关闭他们,只要程序
// 没有关闭这些流,在程序运行的任何时候都可以通过他们来输入或输出数据
// 重新包装标准I/O
// System.in是InputStream类型,为了读取到格式化的数据,以及提高读数据的效率,需要对其进行包装,下面先用InputStreamReader适配器把System.in
// 转换为Reader类型,再用BufferedReader来装饰它。
// System.out是PrintStream类型,可以通过以下方式把它转换为PrintWriter类型
// 标准I/O重定向
// 默认时,标准输入流从键盘读取数据,标准输出流和标准错误输出流向控制台输出数据,System类提供了一些用于重定向流的静态方法
// setIn(InputStream in);对标准输入流重定向
// setOut(PrintStream out);对标准输出流重定向
// setErr(printStream out);对标准错误输出流重定向
// 有时候程序向控制台输出大量数据,由于输出数据滚动太快,会影响阅读,此时可以把标准输出流重定向到一个文件
// PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));
// 随机访问文件类:RandomAccessFile
// 无论是inputStream和OutputStream,还是Reader和Write,他们的共同点:只能按照数据的先后顺序读取数据源的数据,以及按照数据的先后顺序向数据汇写数据
// RandomAccessFile不属于流,它具有随机读写文件的功能,能从文件的任意位置开始执行读写操作,下面提供了定位文件位置的方法
// getFilePointer():返回当前读写指针所在的位置
// seek(long pos):设定读写指针的位置,与文件开头相隔pos个字节数
// skipBytes(int n):使读写指针从当前位置开始,跳过n个字节
// length():返回文件包含的字节数
// RandomAccessFile类实现了DataInput和DataOutput接口,因此能读写格式化数据,RandomAccessFile类提供了以下构造方法
// RandomAccessFile(File file,String mode);参数file指定被访问的文件
// RandomAccessFile(String name, String mode);参数name指定被访问的文件的路径
// 以上构造方法mode参数指定访问模式:可选值包括"r"和"rw",前者表示随机读模式,后者表示随机读写模式,注意:不支持只写文件模式,因此把mode设为"w"是非法的
public class Test19 {
public static void main(String[] args) throws Exception {
// InputStream inputStream = System.in;// 获取键盘输入的内容
// InputStreamReader reader = new InputStreamReader(inputStream);
// BufferedReader bufferedReader = new BufferedReader(reader);
// String data;
// while ((data = bufferedReader.readLine()) != null && data.length() != 0) {
// System.out.println("echo:" + data);
// }
// System.err.println("错误信息输出到控制台");
// System.out.println("普通信息输出到控制台");
// PrintWriter pw = new PrintWriter(System.out,true);
// pw.println("不爽");
// redirect();
RandomTest();
}
public static void redirect() throws Exception{
// 将所有的System.out信息输出到out.txt文件中
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));
System.setOut(out);
System.out.println("haha");
out.close();
// 再将System.out信息输出到默认的控制台
PrintStream pt = System.out;
System.setOut(pt);
System.out.println("gogo");
pt.close();
}
public static void RandomTest() throws Exception{
RandomAccessFile rf = new RandomAccessFile("D:\\test.dat", "rw");
for (int i = 0; i < 10; i++) {
rf.writeLong(i*1000);
}
rf.seek(5*8);//从文件开头开始,跳过5个long数据,接下来写第6个long数据,覆盖原来的第6个long数据
rf.writeLong(1234);
rf.seek(0);//把读指针定位到文件开头
for (int i = 0; i < 10; i++) {
System.out.println("Value"+i+":"+rf.readLong());
}
rf.close();
}
}
相关文章推荐
- Java标准教程:Java 2D绘图--第1章 Java 2d API概念概述
- Java标准教程:Java 2D绘图--第1章 Java 2d API概念概述
- JAVA数据流概念及标准数据流的实现
- Java标准教程:Java 2D绘图--第1章 Java 2d API概念概述
- java使用ocr识别标准字符
- 094day(Java的函数,块的概念和划分,数的原码,反码,补码的学习)
- (转)针对 Java 开发人员的 Dojo 概念
- JAVA标准系列(JSR 208: Java Busi…
- java初学笔记之java的几个标准输入
- RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
- Java多线程:概念
- java中方法的详解与重载的概念
- Java中的引用概念
- [转]Java常用概念解答
- JBI - Java实现SOA的标准方法
- java 序列化,持久化(概念)
- 深入理解Java:注解(Annotation)基本概念
- Java入门需掌握的30个基本概念
- Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
- 6.1-全栈Java笔记:异常处理机制的概念